我正在尝试创建一个递归函数,该函数应返回数字之和。该函数应该只有一个参数。到目前为止,我有这个;
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。
我已经在纸上解决了问题,但无法弄清楚我哪里出错了。任何帮助将不胜感激。
答案 0 :(得分:2)
你实际上并没有递归。你已经设置了基本情况,但是当递归地解决问题时,你应该在中使用函数来调用函数本身。
所以你错过了调用 sumDigits
的一行,参数较小。
考虑递归soutlion的两个重要部分:
请注意,您的问题非常适合:if / else中有2个案例。您的基本情况设置得很好,现在在您想要实际递归的另一个分支中。你应该把呼叫放在sumDigits
的哪个位置。
答案 1 :(得分:1)
您的方法不是递归的。它应该在最后一部分自称:
return rightdigit + sumDigits(n / 10);
这会将最右边的数字添加到最左边数字的递归求和数。
答案 2 :(得分:1)
您忘记了对sumDigits()
的来电。
改变这一行:
return rightdigit + (n / 10);
到此:
return rightdigit + sumDigits(n / 10);