Онлайн компилятор C

#include <stdio.h> int count_binary_ones(int n) { int sum=0; if(n%2!=0){ sum++; return sum+(count_binary_ones(n/2)); }else return (count_binary_ones(n/2)); return sum; } int main() { int x, all; scanf("%d", &x); all = count_binary_ones(x); printf("%d",all); return 0; }
这段代码试图用递归计算一个整数的二进制表示中1的个数。基本思路是检查最低位是否为1,然后递归处理除以2后的数。但代码中存在逻辑问题。

- 递归函数中,当n为奇数时,你增加了sum并返回sum加上递归结果,但sum是局部变量,每次递归调用都会重新初始化为0,所以这个累加方式不正确。实际上,你只需要直接返回1加上递归结果即可,不需要sum变量。
- 当n为偶数时,直接返回递归结果,这部分逻辑正确。
- 函数末尾的`return sum;`是多余的,因为前面的if-else已经覆盖了所有路径,永远不会执行到这里。
- 另外,递归缺少终止条件。当n等于0时,应该直接返回0,否则递归会无限进行下去(因为0除以2还是0)。