我已经编写了递归函数,该函数将返回给定数字中一位的计数。每当我尝试运行代码时,它都会显示分段故障核心转储。请告诉我这段代码出了什么问题??

#include<stdio.h>
int main(){
    int no;
    printf("Enter the number:\n");
    scanf("%d",&no);
    printf("Count of Number of One Bits is:%d\n",recursiveCountNumberOfOnes(no));
    //recursiveCountNumberOfOnes(no);
}

int recursiveCountNumberOfOnes(int no){
int x=1;
int count=0;

    if((no&x)!=0)
    {
        count++;
        x=x<<1;
    }
    return recursiveCountNumberOfOnes(count);

}

最佳答案

这是对无符号整数执行此操作的简单方法。请注意,每次设置一个位后,它只是如何返回1 +,并且只要no不为零,它将继续递归。最后在末尾添加零。

int recursiveCountNumberOfOnes(unsigned int no)
{
    if (no&1)
        return 1 + recursiveCountNumberOfOnes(no>>1);
    else if (no)
        return recursiveCountNumberOfOnes(no>>1);
    else
        return 0;
}


和略微的高尔夫球版本

int recursiveCountNumberOfOnes(unsigned n) {
    return n?(n&1)+recursiveCountNumberOfOnes(n/2):0;
}

10-07 19:16
查看更多