写一个函数求一个整数的二进制有几个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;
}
递归函数最后加一句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;
}
int NumberOf1(int n)
{
if (0 == n)
return 0;
return (n % 2) + NumberOf1(n / 2);
}
子函数的返回的情况没写完。你在vs下编译的话,应该会有警告,说不是所有的返回路径什么的。
所以你if外部要来一个return 0
把所有的返回情况写进去
NumberOf1 这个函数这样写:
int NumberOf1(int n)
{
if (0 == n)
return 0;
if (1 == n % 2)
return 1 + NumberOf1(n / 2);
else
return NumberOf1(n / 2);
}