我试图做一个递归函数,它应返回数字之和 . 该函数应该只有一个参数 . 到目前为止,我有这个;
public int sumDigits(int n) {
if(n%10 == n) // last digit remains
return n;
else{
int rightdigit;
rightdigit = n%10; // taking out the right most digit
return rightdigit + (n/10); // adding it to everything on left
}
}
该功能适用于某些值,特别是2位数字 . 但它给出了像730这样的数字的奇怪值,当它应该是10时,它就是73 .
我已经在纸上解决了问题,但无法弄清楚我哪里出错了 . 任何帮助将非常感激 .
3 回答
你实际上并没有递归 . 您已经设置了基本情况,但是在递归地解决问题时,您应该在函数内部调用函数本身 .
所以你错过了一个调用
sumDigits
的行,参数较小 .考虑递归soutlion的两个重要部分:
基本情况 . 这是递归的结束,此时您的递归将开始返回,在您的情况下创建一个总和 .
递归:你的递归函数会调用自身,使用不同的参数,通常是问题的一小部分 .
请注意,您的问题非常适合:您希望实际递归 . 你应该非常明白把呼叫放在哪里
sumDigits
.你的方法不是递归的 . 它应该在最后一部分自称:
这会将最右边的数字添加到最左边数字的递归求和数 .
你忘了打电话给
sumDigits()
. 改变这一行:对此: