通过递归的数字总和

时间:2015-06-14 19:44:09

标签: java function recursion sum digit

我正在尝试创建一个递归函数,该函数应返回数字之和。该函数应该只有一个参数。到目前为止,我有这个;

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 个答案:

答案 0 :(得分:2)

你实际上并没有递归。你已经设置了基本情况,但是当递归地解决问题时,你应该在中使用函数来调用函数本身。

所以你错过了调用 sumDigits的一行,参数较小。

考虑递归soutlion的两个重要部分:

  1. 基本情况。这是递归的结束,此时你的递归将开始返回,在你的情况下创建一个总和。
  2. 递归:你的递归函数将调用自身,使用不同的参数,通常是问题的一小部分。
  3. 请注意,您的问题非常适合:if / else中有2个案例。您的基本情况设置得很好,现在在您想要实际递归的另一个分支中。你应该把呼叫放在sumDigits的哪个位置。

答案 1 :(得分:1)

您的方法不是递归的。它应该在最后一部分自称:

return rightdigit + sumDigits(n / 10);

这会将最右边的数字添加到最左边数字的递归求和数。

答案 2 :(得分:1)

您忘记了对sumDigits()的来电。 改变这一行:

return rightdigit + (n / 10); 

到此:

return rightdigit + sumDigits(n / 10);