计算二进制时无限循环

时间:2017-02-16 18:07:24

标签: c function while-loop

我写了一个函数来查找整数的二进制值。

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

为什么会这样?

1 个答案:

答案 0 :(得分:1)

每次调用递归函数二进制时,都会发送比之前小2倍的新值。有一次,该值将达到0,而n>0将为false,因此您不会进入循环,并且您将从上一个递归函数返回。由于您再次调用函数时没有更改n的值,n仍然具有值1,从这一点开始,它不会被更改。 1总是大于0,因此您将陷入无限循环。