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