我正在尝试计算整数的二进制表示中的一个数。我需要递归地做这件事。我认为我的逻辑是正确的,但我继续得到堆栈溢出。我在第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)。”
答案 0 :(得分:11)
删除if中的等号。 0除以2仍然为零 - 你进入无限递归。
我的意思是制作这个:
if (n >= 0)
严格比较,即:
if (n > 0)