堆栈函数调用问题

前端之家收集整理的这篇文章主要介绍了堆栈函数调用问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为fun1()的函数,用于递归.我很困惑第一次打电话给这个有趣的( – n);.它会做什么以及每个函数完成后我的堆栈如何弹出我的函数
void fun(int n)
{
    if(n>0)
    {
        fun(--n);
        printf("%d",n);
        fun(--n);
    }
}

我的主要功能如下:

int a;
    a=3;
    fun(a);

我想知道执行的顺序以及我的堆栈在第一个函数( – n)的函数调用之前,期间和之后将包含的内容.

解决方法

您的输出将为0,然后是1,然后是2,然后是0.

>最初用3调用
>大于0,它调用fun( – n),这使它成为2.
>这一直持续到0.
>它继续到printf(),并向控制台输出0.

您没有看到的是中间调用.这是完整输出(在n> 0部分之前):

Fun call before n > 0; n = 3
Fun call before n > 0; n = 2
Fun call before n > 0; n = 1
Fun call before n > 0; n = 0
0
Fun call before n > 0; n = -1
1
Fun call before n > 0; n = 0
2
Fun call before n > 0; n = 1
Fun call before n > 0; n = 0
0
Fun call before n > 0; n = -1

猜你在找的C&C++相关文章