5

我正在尝试计算整数二进制表示中的个数。我需要递归地执行此操作。我认为我的逻辑是正确的,但我继续得到堆栈溢出。我在第 2 天进行故障排除。这是我的代码:

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

我的逻辑基于以下信息:“从十进制转换为二进制的标准机制是重复将十进制数除以 2,并在每次除法时输出余数(0 或 1)。”

4

1 回答 1

11

删除 if 中的等号。0 除以 2 仍然是零 - 你进入无限递归。

我的意思是做这个:

if (n >= 0)

严格比较即:

if (n > 0)

于 2013-01-11T23:52:13.743 回答