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

#include <stdio.h> int count_binary_ones(int n) { if(n%2==1||n>2){ return 0;} return n%2+(count_binary_ones(n/2)); } int main() { int x, all; scanf("%d", &x); all = count_binary_ones(x); printf("%d",all); return 0; }
这段代码试图计算一个整数的二进制表示中1的个数,但逻辑有误。函数 `count_binary_ones` 的递归条件不正确,导致大部分输入都会直接返回0。

- 检查递归的终止条件:当 `n` 为0时应该返回0,而不是用 `n%2==1||n>2` 来判断。当前条件会让很多数字(比如3)直接返回0,没有正确递归。
- 递归公式应该是:当前最低位(n%2)加上对 n/2 的递归结果。你的 `return` 语句中已经写了这个公式,但前面的 `if` 条件破坏了它。思考一下什么时候应该停止递归,而不是用 `n%2==1||n>2` 这种条件。