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

#include <stdio.h> int count_binary_ones(int n) { int sum=0; if(n%2!=0){ sum++; return 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的个数,但存在逻辑错误。函数 `count_binary_ones` 使用了递归,但每次递归调用时都丢弃了之前累加的 `sum` 值,导致最终结果总是0。

- 递归函数中,每次调用都会重新初始化 `sum` 为0,并且递归返回时没有把子问题的结果与当前 `sum` 合并。你需要思考如何让递归的每一层都能把当前位的计数和后续递归的结果正确相加。
- 注意 `return sum;` 这一行永远不会执行,因为前面的 `if-else` 分支已经包含了 `return` 语句。这提示你递归的返回值设计可能有问题。