我正在尝试解决此练习:编写一个递归方法,该方法返回传递给它的整数中的位数作为int类型的参数。允许积极和消极的论点。例如,-120有三位数。
这是我的代码,但是当我尝试传递121时,我只是得到1:
public static int recursion(int inNumber){
//create a counter variable for the total of digits
int totalDigits = 0;
//base case
if (inNumber < -10 || inNumber > 10){
totalDigits++;
return totalDigits;
//recursive case
}else{
totalDigits++;
return recursion(inNumber/10) + totalDigits;
}
}
答案 0 :(得分:1)
使用Math.abs
public static void main(String[] args) {
System.out.println(recursion(123456, 0));
}
public static int recursion(int inNumber, int totalDigits){
totalDigits++;
if (Math.abs(inNumber) < 10){
return totalDigits;
}else{
return recursion(inNumber/10, totalDigits);
}
}
<强>输出强>
6
答案 1 :(得分:0)
如果你拿121,
int totalDigits = 0;
if (121< -10 || 121> 10){ // YES 121>10 then:
totalDigits++;
return totalDigits;
您的逻辑检查它是否高于10,它是,并返回totalDigits(1)。你想做的是反过来。如果它高于10,则调用相同的功能。基本上你的if / else只是颠倒了。
答案 2 :(得分:0)
每次调用你的方法,你重置totalDigits的值,你应该影响你的函数的totalDigits作为递归调用的一部分,你的代码应该是
public static int recursion(int inNumber) {
//create a counter variable for the total of digits
//base case
if (Math.abs(inNumber)<10) {
return 1;
//recursive case
} else {
return recursion(inNumber / 10) + 1;
}
}
答案 3 :(得分:0)
以下是我修复此代码的方法:
<强> 1 强> 通过使用逻辑否定解决逻辑错误并使代码更具描述性。
public static int recursion(int inNumber) {
//create a counter variable for the total of digits
int totalDigits = 0;
//base case
if (!(inNumber <= -10 || inNumber >= 10)) { //notice the !
return totalDigits + 1;
//recursive case
} else {
totalDigits++;
return recursion(inNumber / 10) + totalDigits;
}
}
优化 1 :您也可以删除局部变量totalDigits
,因为它总是1
:
public static int recursion(int inNumber) {
//base case
if (!(inNumber <= -10 || inNumber >= 10)) {
return 1;
//recursive case
} else {
return recursion(inNumber / 10) + 1;
}
}
优化 2 :您可以使用Math.abs(int)
:
public static int recursion(int inNumber){
if (Math.abs(inNumber) < 10) { //base case
return 1;
} else { //recursive case
return recursion(inNumber / 10) + 1;
}
}
答案 4 :(得分:-1)
再看看你的条件。 121大于10,因此条件inNumber > 10
为真,执行totaldigits++
并且方法返回1.
条件应为if (inNumber > -10 && inNumber < 10)
。