在线编译器 C

#include <stdio.h> int count_binary_ones(int n) { int sum=0; if(n%2!=0){ sum++; }else return (n/2); return sum; } int main() { int x, all; scanf("%d", &x); all = count_binary_ones(x); printf("%d",all); return 0; }
这段代码试图计算一个整数的二进制表示中1的个数,但实现是错误的。目前它只检查了最低位是否为1,然后错误地返回了n/2(这实际上是右移一位的结果,而不是1的个数)。

- 你的递归思路是对的,但当前代码没有正确递归。当n%2!=0时,你只加了1就返回了,没有继续处理剩下的位。你应该在加1之后,再递归处理n/2(即右移一位后的数)。
- 当n%2==0时,你直接返回n/2,这完全不对。这里应该递归调用count_binary_ones(n/2),而不是返回n/2这个数值本身。