鱼C论坛

 找回密码
 立即注册
查看: 3793|回复: 4

递归问题

[复制链接]
发表于 2013-7-22 08:02:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void main()
{
        void hanoi(int n,char one,char two,char three);
        int m;
        printf("input the number of diskes:");
        scanf("%d",&m);
        printf("the step to moving %d diskes:\n",m);
        hanoi(m,'A','B','C');
}
void hanoi(int n,char one,char two,char three)
{
        void move(char x,char y);
        if(n==1)
        {
                move(one,three);
        }
        else
        {
                hanoi(n-1,one,three,two);
                move(one,three);
                hanoi(n-1,two,one,three);

        }
}
void move(char x,char y)
{
        printf("%c-->%c\n",x,y);
}
红色的部分是怎么运行的?谁能帮忙解答下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-22 08:03:27 | 显示全部楼层
沙发自己的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-22 15:27:28 | 显示全部楼层
(我是学C++的,那个move()函数不知道是输出啥!C++中函数声明都在主函数外面)
无聊中……着给你解释下:
假如输入一个数为3
那么带入函数为 hanoi(3,‘A’,‘B’,‘C’)
if(n==1)为递归调用链,现在n=3
所以-〉else
再一次带入函数为
hanoi(3-1,‘A’,‘C’,‘B’)(这里的one=A,two=C,three=B)
      n=2所以->else
      hanoi(2-1,‘A’,‘B’,‘C’)
            n=1递归结束->move(‘A’,‘C’)
      move(‘A’,‘B’)
      hanoi(2-1,‘C’,‘A’,‘B’)
            n=1递归结束->move(‘C’,‘B’)
move(‘A’,‘C’)
hanoi(3-1,‘B’,‘A’,‘C’)(这里的one=B,two=A,three=C)
      n=2所以->else
      hanoi(2-1,‘B’,‘C’,‘A’)
           n=1递归结束->move(‘B’,‘A’)
      move(‘B’,‘C’)
      hanoi(2-1,‘A’,‘B’,‘C’)
           n=1递归结束->move(‘A’,‘C’)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-22 17:45:49 | 显示全部楼层
递归的精髓就是:假设已经知道了用规模小于n的问题的解,用这些解来解答规模为n的问题。知道这点后,你就要知道,红色部分不需要你去管它是怎么执行的。(当然你也可以管,然后会发现过程非常的麻烦,并且“自豪”地认为这样分析一遍很厉害,不过从此以后你就只能慢慢地用这种土方法看别人写的递归程序,你自己就永远也写不出递归程序。学递归最重要的一点就是要勇于假设规模小于n的问题答案自己都知道了,并且坚决不去想到底是怎么知道的)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-22 17:56:43 | 显示全部楼层

谢谢哈,好像有点理解了,再去想想
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-18 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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