递归函数响应不同的值

时间:2017-04-18 18:27:25

标签: java recursion

我写了一个java递归函数来得到一个数字的总和,如下所示,总和也应该是单个数字。我在这里遇到的问题是它应该返回结尾处的else部分,因为它给出了if if else条件返回语句后:

static int recSum(int n){
    int sum = 0;
    while(n!=0){
        sum += n%10;
        n = n/10;
    }

    if(sum>9) { 
        recSum(sum); 
    } 
    else { 
        return sum; 
    }
       return sum ;

}

让我们说n = 12345所以最后它需要返回5,因为它返回14.然而它将转到else部分,但正确的值没有返回。我用三元运算符得到了解决方案而没有其他循环。但是想知道这是什么原因我得到了之前的14而不是5(5来自14 = 1 + 4)

感谢对此的回应

3 个答案:

答案 0 :(得分:1)

您应该做的更改非常简单:您应该删除最后一个return语句并返回递归调用的结果:

static int recSum(int n){
    int sum = 0;
    while(n!=0){
        sum += n%10;
        n = n/10;
    }

    if(sum>9) { 
        return recSum(sum); 
    } 
    else { 
        return sum; 
    }
}

答案 1 :(得分:0)

当此函数到达if语句并再次调用该函数时,15将保存在堆栈中,直到当前调用结束,当前调用结束时,前一个答案为15,因此它返回该因为它返回后你不会修改它。

答案 2 :(得分:0)

这是一种迭代方式(不是在程序中构建递归的好方法)

    while (n != 0) {
        sum += n % 10;
        n = n / 10;
    }

这是正确的递归方式,即使对于0和负数也是如此。

static int recSum(int n) {
    int sum = 0;

    sum = sum + (n % 10);
    n = n / 10;

    if (n != 0) {
        return sum + recSum(n);
    } else {
        return sum;
    }
}