这个程序不应该无限运行,因为每次都调用main函数吗?为什么它的输出是0 0 0 0
?我知道这是一个noob问题,但我无法得到它。什么--i
做什么和声明我静态的影响是什么?这个程序为什么不能无限运行?
int main()
{
static int i=5;
if(--i){
main();
printf("%d ",i);
}
}
这个程序不应该无限运行,因为每次都调用main函数吗?为什么它的输出是0 0 0 0
?我知道这是一个noob问题,但我无法得到它。什么--i
做什么和声明我静态的影响是什么?这个程序为什么不能无限运行?
int main()
{
static int i=5;
if(--i){
main();
printf("%d ",i);
}
}
static int
每次都没有重新初始化。因此,每次调用main()时,i都是较低的。(--i)
为零时,递归循环终止。因此,它从i=5
开始,并调用一个新的副本。这一个有i=4
,它再次调用一个新的副本。这一直持续到i=0
,此时该功能才终止。控制流程然后返回到调用堆栈,并且main
的每个副本打印i
,现在是0. 4个副本表示4个零。
它不会永远运行下去的原因是因为在某些时候i
变为0,不再要求主。技巧是static
,它引用相同的内存位置,因此每次递归调用main
时递减。
阅读:[在递归函数情况下获得的值](http://stackoverflow.com/questions/17785765/values-obtained-in-case-of-a-recursive-function/17785800#17785800) –
是你的问题真的是“--i”是什么意思?“,而不是”为什么这不会无限运行?“? –
@OliCharlesworth嗨,不,我知道--i是什么意思。我想知道如果条件有效,如何使用它?它会运行直到我变成0吗? – rishiag