我写了一个函数来查找整数的二进制值。
int binary(int n)
{
if(n>0)
{
int x=n%2;
binary(n/2);
printf("%d",x);
}
}
这给出了正确的输出,而下面的输出给出了无限循环。
int binary(int n)
{
while(n>0)
{
int x=n%2;
binary(n/2);
printf("%d",x);
}
}
为什么会这样?
答案 0 :(得分:1)
每次调用递归函数二进制时,都会发送比之前小2
倍的新值。有一次,该值将达到0
,而n>0
将为false,因此您不会进入循环,并且您将从上一个递归函数返回。由于您再次调用函数时没有更改n
的值,n
仍然具有值1,从这一点开始,它不会被更改。 1
总是大于0
,因此您将陷入无限循环。