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 で割って取得できます。int を使用していた場合は、次のようになります。

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 に答える