C中的意外输出(递归)

时间:2013-09-04 20:10:23

标签: c recursion

int main(void) {
 static int=5;
 if(--i) {
    main();
    printf("%d",i);
   }
 }

上述程序的输出是---

0000

但我认为应该是---

1234

我不知道为什么?请帮助我。

3 个答案:

答案 0 :(得分:3)

零的原因是i在运行第一个printf语句之前递减到零。当它展开时,它每次打印i(仍为零)。

最好使用main()调用并传递参数的单独函数(然后将参数传递给每个调用而不是使用静态变量)。

答案 1 :(得分:2)

  1. 您将静态变量i设置为5
  2. 您在main之前递归,直到i变为零。
  3. 递归以i为零而展开。
  4. 然后调用printf
  5. 答案就在于此。

    您可以使用调试器

    来证明这一点

答案 2 :(得分:-1)

O(n^2)

现在是时候打印i的值了,它是main()之后的下一行。控制权返回到第四个,以便第一次调用以打印i值。

  [First call:  i->4 and call main()]
  [Second call: i->3 and call main()]
  [Third call:  i->2 and call main()]
  [Fourth call: i->1 and call main()]
  [Fifth call:  i->0 and condition false as it gives 0.]