Java中递归计数的堆栈溢出问题

5

我正在尝试递归地计算整数的二进制表示中的1的数量。我认为我的逻辑是正确的,但我仍然遇到了堆栈溢出的问题。我已经花费了两天时间进行故障排除。以下是我的代码:

    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)"。


请注意,您需要进一步调整您的解决方案,以使其适用于负整数。 - biziclop
1个回答

11

在if语句中去掉等于号。0除以2仍然是零-会导致无限递归。

我是指修改这个语句:

if (n >= 0)

使用严格比较符:

if (n > 0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接