我写了一个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)
感谢对此的回应
答案 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;
}
}