根据递归的逻辑,最后printf()
必须只遇到一次。 main()
之后的if()
应该将控件发送回开头。只有在var
变为零后,我们才能到达printf()
。为什么我们遇到printf()
五次?我知道之前已经问过这个问题,但这个逻辑没有在那里解释。
void main()
{
static int var=5;
if(--var){
main();
}
printf("%d\n", var);
}
答案 0 :(得分:1)
printf
声明不在if
范围内。对main
的每次(递归)调用最终会在终止前调用printf
。
答案 1 :(得分:1)
"最后printf()
必须只遇到一次" 不正确。
您输入main()
五次,因此您将退出5次。 main()
的每次调用都会输入一个新的副本,为它打开一个新的堆栈帧。
当下一次调用打印了它的值并退出时,控件将在递归调用之后返回上一次调用。
答案 2 :(得分:-2)
你应该再次阅读递归的逻辑...
当仅从该函数内部调用该函数时,当前正在执行的函数及其所有参数被推入堆栈,并且新调用的函数开始执行。当这个函数调用结束时,执行返回到前一个函数(通过从堆栈中弹出),它将从它离开的位置开始执行..
现在,您可以跟踪您的程序并检查他的逻辑..