大家好,我很难理解递归函数调用,就在我以为自己理解了递归函数调用时,我看到一个问题使我意识到我错了,我无法理解程序的流程
#include <stdio.h>
void fun(int n)
{
if(n>0)
{
fun(--n);
printf("%d\n",n);
fun(--n);
}
}
int main(void) {
int a;
a=3;
fun(a);
return 0;
}
让我们尝试用大小写来理解它,n=2
然后您应该可以一概而论。
fun (2):
内部(流)发生了什么:
1)n=2:
if(n>0)
是正确的,并且由于-fun(--n)
被调用并n
设置为值1;(请参见下面的步骤)。
2)n=1:
现在n=1
:再次if(n>0)
成立,并使用fun(--n)
进行调用n=0
。请参阅下面的步骤。
3)n=0:
现在n=0;
if(n>0)
为假,所以我们返回。
我想这是你的困惑。从步骤3开始,您将退回到步骤2(而不是步骤1)。fun(--n)
调用后实际上在第2步中引发了您-由于递减,因此printf
调用的值为n=0
。然后在同一位置(之后printf
)再次fun(--n)
使用value调用n=-1
,该值也会退出-最终您将被扔到开头。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句