0

我试图实现一个返回自然数的函数,该自然数是输入的自然数内的数字之和。我只是不断地陷入无限循环。我知道我必须返回递归调用,但我无法弄清楚。这是我到目前为止所拥有的:

private static NaturalNumber sumOfDigits(NaturalNumber n) {
        NaturalNumber zero = new NaturalNumber2(0);
        if (n.compareTo(zero) == 0) {
            return zero;
        } else {
            NaturalNumber z = new NaturalNumber2(n.divideBy10());
            n.divideBy10();
            z.add(sumOfDigits(n));

         // return ___;

        }
    }

我应该返回什么?返回 z 不起作用

4

2 回答 2

1

您正在使用 n 进行递归调用,与传递到您的过程中的数字相同。如果去掉 z 的一个数字,则必须使用其余数字进行递归调用。

你可以用 mod 10 去掉一个数字,然后除以 10 得到其余的数字。如果你使用的是整数,它将是:

return (n % 10) + sumOfDigits(n / 10);
于 2013-10-16T19:25:42.463 回答
0

z.add(sumOfDigits(n));应该是z.add(sumOfDigits(n.divideBy10()));。要点是在递归中,您只想处理答案的其余部分,而不是整个问题。

于 2013-10-16T19:06:17.127 回答