加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

堆栈函数调用问题

发布时间:2020-12-16 03:37:28 所属栏目:百科 来源:网络整理
导读:我有一个名为fun1()的函数,用于递归.我很困惑第一次打电话给这个有趣的( – n);.它会做什么以及每个函数完成后我的堆栈如何弹出我的函数? void fun(int n){ if(n0) { fun(--n); printf("%d",n); fun(--n); }} 我的主要功能如下: int a; a=3; fun(a); 我想
我有一个名为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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读