如何在java中编写递归方法,该方法接受正整数或负整数并返回它具有的位数

时间:2018-04-06 02:27:12

标签: java recursion methods

我正在尝试解决此练习:编写一个递归方法,该方法返回传递给它的整数中的位数作为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;
    }
}

5 个答案:

答案 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)