递归函数,它将返回给定数字的二进制数

时间:2018-02-16 15:15:25

标签: c recursion

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

#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);

}

2 个答案:

答案 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;    
}