游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 卡特铁角

[讨论] 估计被人鄙视了……

[复制链接]

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-10-31 21:55:00 | 显示全部楼层

Re:估计被人鄙视了……

--n 是等于n自减一吗? 不是n-=1 吗?
那结果应该是 1   2 1    3 121  41213121

到了e(1)时递归才开始往回倒,所以第一个会打印 1,因为打印后又递归一次,当回倒到大于2的时候,又重复调用一次

一个很无聊又很绕的题目,考程序还是策划?

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
 楼主| 发表于 2006-11-1 09:38:00 | 显示全部楼层

Re: Re:估计被人鄙视了……

zfscnu: Re:估计被人鄙视了……

--n 是等于n自减一吗? 不是n-=1 吗?
那结果应该是 1   2 1    3 121  41213121

到了e(1)时递归才开始...

估计他们是想看看我能不能做程序……

PS:你的答案不正确……

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
 楼主| 发表于 2006-11-1 10:03:00 | 显示全部楼层

Re: 估计被人鄙视了……

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)
                                    返回
                        返回
            返回
输出'3'
e(2)
            2>0
            e(1)
                        1>0
                        e(0)
                                    返回
                        输出'0'
                        e(-1)
                                    返回
                        返回
            输出'1'
            e(0)
                        返回
            返回
结束


最后输出结果:0120301                  

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-11-1 10:14:00 | 显示全部楼层

Re:估计被人鄙视了……

是吗?
我记得递归不是这样的哦

e(0)回来后(因为0不>0哦,那么if后面就执行不了,包括打印)
n是=1
printf(d%,n);=打印 1哦 不是0

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-11-1 10:27:00 | 显示全部楼层

Re:估计被人鄙视了……

恩~~ 好像忘记了--1是已经减1了  是搞错了,应该是0的~

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

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

Re: Re:估计被人鄙视了……

zfscnu: Re:估计被人鄙视了……

是吗?
我记得递归不是这样的哦

e(0)回来后(因为0不>0哦,那么if后面就执行不了,包括打印)
n是=1
printf(d%,n);=打印 1哦 不是0

实际上递归调用时程序会在内存中建立工作栈,用以保存主调函数当前状态。又由于这里的函数调用只是值传递,即被调函数中的计算不影响主调函数中变量的值。

你对递归的理解应该是正确的。但你要注意这里的--n在被传递给被凋的函数之前已经自减了1,而且“e(--n)”当中n实际上还是主调函数中的变量。因此当从调用函数返回时主调函数中的变量n之值已经变成了0。

void e(int n)
{
     if(n>0)
     {
          e(--n);
          printf(d%,n);
          e(--n);
     }
}
当n=1时,判断n>0为true:执行e(--n);
主调函数中的n值变为0……返回输出主凋函数中的n值:0

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
 楼主| 发表于 2006-11-1 10:40:00 | 显示全部楼层

Re:估计被人鄙视了……

哎~~我也是1年多没碰过c了。要重新捡起来估计还需要1~2周的时间吧……

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2006-11-1 12:37:00 | 显示全部楼层

Re:估计被人鄙视了……

void e(int n)
{
    if(n>0)
    {
        e(--n);
        printf(d%,n);
        e(--n);
    }
}
-----------------------------
说明:
e(0)=没有任何结果,e(-1)=没有任何结果
e(1)=e(0);printf(%d,0);e(-1)=printf(%d,0)=打印 "0"
e(2)=e(1);printf(%d,1);e(0);=e(1);printf(%d,1);=打印 "0",打印"1"
e(3)=e(2);printf(%d,2);e(1);=(打印"0",打印"1"),打印"2",打印"0"
e(4)=e(3);printf(%d,3);e(2);=(打印"0",打印"1",打印"2",打印"0"),打印"3",(打印 "0",打印"1")
= 0120301

对吗?

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
 楼主| 发表于 2006-11-1 17:15:00 | 显示全部楼层

Re: Re:估计被人鄙视了……

snhun: Re:估计被人鄙视了……

void e(int n)
{
    if(n>0)
    {
        e(--n);
        printf(d%,n);
        e(--n);
  ...

半对……我的答案在前面。你看下吧,不保证正确,没有在机器上验算的条件——北京的网吧真TMD规范啊。

2

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-11-1 17:25:00 | 显示全部楼层

Re:估计被人鄙视了……

功底要扎实
程序要天天练啊
值得深思一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-8 21:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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