5

整数の2進表現でOneの数を数えようとしています。これを再帰的に行う必要があります。私のロジックは正しいと思いますが、スタックオーバーフローが発生し続けます。2日目のトラブルシューティング中です。これが私のコードです:

    static int CountRecursive(int n) {
    int sum = 0;
    if (n >= 0) {
        if (n%2 == 1) {
            sum ++;
        } sum += CountRecursive(n/2);
    } return sum;
} 

私の論理はこの情報に基づいています。「10進数から2進数に変換するための標準的なメカニズムは、10進数を2で繰り返し除算し、各除算で余り(0または1)を出力することです。」

4

1 に答える 1

11

ifのequalsを削除します。0を2で割った値はまだゼロです-無限再帰になります。

私はこれを作ることを意味します:

if (n >= 0)

厳密な比較すなわち:

if (n > 0)

于 2013-01-11T23:52:13.743 に答える