2013-09-23 52 views
0

这个程序不应该无限运行,因为每次都调用main函数吗?为什么它的输出是0 0 0 0?我知道这是一个noob问题,但我无法得到它。什么--i做什么和声明我静态的影响是什么?这个程序为什么不能无限运行?

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

阅读:[在递归函数情况下获得的值](http://stackoverflow.com/questions/17785765/values-obtained-in-case-of-a-recursive-function/17785800#17785800) –

+2

是你的问题真的是“--i”是什么意思?“,而不是”为什么这不会无限运行?“? –

+0

@OliCharlesworth嗨,不,我知道--i是什么意思。我想知道如果条件有效,如何使用它?它会运行直到我变成0吗? – rishiag

回答

4
  1. static int每次都没有重新初始化。因此,每次调用main()时,i都是较低的。
  2. (--i)为零时,递归循环终止。

因此,它从i=5开始,并调用一个新的副本。这一个有i=4,它再次调用一个新的副本。这一直持续到i=0,此时该功能才终止。控制流程然后返回到调用堆栈,并且main的每个副本打印i,现在是0. 4个副本表示4个零。

0

它不会永远运行下去的原因是因为在某些时候i变为0,不再要求主。技巧是static,它引用相同的内存位置,因此每次递归调用main时递减。

相关问题