effewf 2022-09-16 10:42 采纳率: 50%
浏览 58

递归函数求二进制中1的个数

问题遇到的现象和发生背景

写一个函数求一个整数的二进制有几个1,我尝试用递归实现,但是结果总是多1

int NumberOf1(int n)
{
    if (0 != n)
    {
        if (1 == n % 2)
        {
            return 1 + NumberOf1(n / 2);
        }
        else if (0 == n % 2)
        {
            return NumberOf1(n / 2);
        }
    }
}

int main()
{
    int n = 10;
    printf("%d\n", NumberOf1(n));

    return 0;
}
运行结果及报错内容

img

  • 写回答

5条回答 默认 最新

  • 快乐鹦鹉 2022-09-16 11:00
    关注

    递归函数最后加一句return 0;

    int NumberOf1(int n)
    {
        if (0 != n)
        {
            if (1 == n % 2)
            {
                return 1 + NumberOf1(n / 2);
            }
            else if (0 == n % 2)
            {
                return NumberOf1(n / 2);
            }
        }
        return 0;
    }
     
    int main()
    {
        int n = 10;
        printf("%d\n", NumberOf1(n));
     
        return 0;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 9月16日