在线编译器 C

#include <stdio.h> int count_binary_ones(int n) { if (n < 2) { return 1; } return 0 + count_binary_ones(n / 2); } int main() { printf("%d", count_binary_ones(5)); return 0; }
这段代码试图计算一个整数的二进制表示中1的个数,但实现有误。当前逻辑是:如果n小于2就返回1,否则递归调用n/2并加0。这实际上只会在n为0或1时返回1,其他情况都只返回1(因为递归最终会到达n=1或0),并没有真正统计1的个数。

- 递归的基准条件(n<2时返回1)不正确。当n为0时,二进制中没有1,应该返回0;当n为1时,二进制中有一个1,返回1。你需要区分这两种情况。
- 递归部分`0 + count_binary_ones(n / 2)`没有考虑当前最低位是否为1。你需要检查n的最低位(n%2),并根据结果决定加1还是加0,然后再递归处理n/2。