游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2108|回复: 3

大家帮忙看下,我错在哪了?

[复制链接]

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
发表于 2006-11-2 11:31:00 | 显示全部楼层 |阅读模式
对于这样一个题目:
void e(int n)
{
    if(n>0)
    {
        e(--n);
        printf(d%,n);
        e(--n);
    }
}
问:e(4)的输出结果
-------------------------------------------------------------
因为:
4>0
e(3)
            3>0
            e(2)
                        2>0
                        e(1)
                                    1>0
                                    e(0)
                                    输出'0'
                                    e(-1)
                        输出'1'
                        e(0)
            输出'2'
            e(1)
                        1>0
                        e(0)
                        输出'0'
                        e(-1)
            输出'1'
            e(0)
输出'3'
e(2)
            2>0
            e(1)
                        1>0
                        e(0)
                        输出'0'
                        e(-1)
            输出'1'
            e(0)
输出'2'
e(1)
            1>0
            e(0)
            输出'0'
            e(-1)
输出'1'
e(0)
结束

所以我在纸上算出来的答案是:01201301201
-------------------------------------------------------------------------------------

GeeGee兄在机器上却得到了如下的结果:
e(4)
e(3)
e(2)
e(1)
e(0)
Print n = 0
e(-1)
Print n = 1
e(0)
Print n = 2
e(1)
e(0)
Print n = 0
e(-1)
Print n = 3
e(2)
e(1)
e(0)
Print n = 0
e(-1)
Print n = 1
e(0)

答案:0120301


很郁闷,期待高手释疑

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
 楼主| 发表于 2006-11-2 11:37:00 | 显示全部楼层

Re:大家帮忙看下,我错在哪了?

e(4)
e(3)
e(2)
e(1)
e(0)
Print n = 0
e(-1)
Print n = 1
e(0)
Print n = 2 难道说是执行到这里的时候再发生调用就不再将主调函数的状态压入工作栈了?
e(1)
e(0)
Print n = 0
e(-1)
……

7

主题

44

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2006-11-2 15:23:00 | 显示全部楼层

Re:大家帮忙看下,我错在哪了?

这个问题可以这么看:
e(4)=e(3)+3+e(2)
e(3)=e(2)+2+e(1)
e(2)=e(1)+1+e(0)
e(1)=e(0)+0+e(-1)
把e(4)慢慢展开有
e(4)=e(2)+2+e(1)+3+e(2)
      =e(1)+1+e(0)+2+e(1)+3+e(1)+1+e(0)
      =e(0)+0+e(-1)+1+e(0)+2+e(0)+0+e(-1)+3+e(0)+0+e(-1)+1+e(0)
因为e(0)和e(-1)都没有打印信息,所以结果是0120301

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
 楼主| 发表于 2006-11-2 18:08:00 | 显示全部楼层

Re: Re:大家帮忙看下,我错在哪了?

rightear: Re:大家帮忙看下,我错在哪了?

这个问题可以这么看:
e(4)=e(3)+3+e(2)
e(3)=e(2)+2+e(1)
e(2)=e(1)+1+e(0)
e(1)=e(0)+0+e(-1)
把e(4...

感谢!这样看确实很清楚了~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 18:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表