递归混乱

用户名

大家好,我很难理解递归函数调用,就在我以为自己理解了递归函数调用时,我看到一个问题使我意识到我错了,我无法理解程序的流程

#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;
}
Gmoniava

让我们尝试用大小写来理解它,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章