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

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

- 递归的终止条件有问题。当n为0时,递归应该停止并返回0,但你的代码中当n为1时返回1,这会导致n为0时无限递归或未定义行为。
- 条件判断的顺序需要调整。你先把n%2!=0的情况处理了,但后面又写了if(n==1)的检查,这个检查永远不会执行到,因为前面的return已经结束了函数。