我编写了递归函数,它将返回给定数字中一位数的计数。每当我尝试运行代码时,它都表示分段故障核心转储。请告诉我这段代码出了什么问题?
#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);
}
答案 0 :(得分:1)
这是对无符号整数执行此操作的简单方法。请注意每次设置位时它只返回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;
}
答案 1 :(得分:-1)
int recursiveCountNumberOfOnes(int no)
{
if (no&1)
return 1 + recursiveCountNumberOfOnes(no>>1);
else if (no)
return recursiveCountNumberOfOnes(no>>1);
else
return 0;
}