代码之家  ›  专栏  ›  技术社区  ›  omkarlanghe

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

  •  0
  • omkarlanghe  · 技术社区  · 7 年前

    我已经编写了递归函数,它将返回给定数字中的一位数。每当我尝试运行代码时,它都会显示segmentation fault core dump。请告诉我这段代码出了什么问题??

    #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 回复  |  直到 7 年前
        1
  •  1
  •   cleblanc    7 年前

    这里有一个简单的方法来处理无符号整数。注意它是如何返回的 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;    
    }
    
        2
  •  -1
  •   chux    7 年前
    int recursiveCountNumberOfOnes(int no)
    {
        if (no&1)
            return 1 + recursiveCountNumberOfOnes(no>>1);
        else if (no)
            return recursiveCountNumberOfOnes(no>>1);
        else
            return 0;    
    }