首页 文章

通过递归的数字总和

提问于
浏览
1

我试图做一个递归函数,它应返回数字之和 . 该函数应该只有一个参数 . 到目前为止,我有这个;

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 回答

  • 1

    你实际上并没有递归 . 您已经设置了基本情况,但是在递归地解决问题时,您应该在函数内部调用函数本身 .

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

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

    • 基本情况 . 这是递归的结束,此时您的递归将开始返回,在您的情况下创建一个总和 .

    • 递归:你的递归函数会调用自身,使用不同的参数,通常是问题的一小部分 .

    请注意,您的问题非常适合:您希望实际递归 . 你应该非常明白把呼叫放在哪里 sumDigits .

  • 1

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

    return rightdigit + sumDigits(n / 10);
    

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

  • 2

    你忘了打电话给 sumDigits() . 改变这一行:

    return rightdigit + (n / 10);
    

    对此:

    return rightdigit + sumDigits(n / 10);
    

相关问题