搜索
查看: 862|回复: 3
打印 上一主题 下一主题

汉诺问题用递归法求解

[复制链接]
跳转到指定楼层
楼主
发表于 2016-2-26 18:08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
书上给的代码实在是不理解,希望有大神能给指点指点,就是在定义的子函数那很糊涂
#include<stdio.h>
void printdisk(char x,char y)
{
    printf("%c------>%c\n",x,y);
}
void hanoi(int n,char a,char b,char c)
{
    if(n==1)
        printdisk(a,c);
    else
    {
        hanoi(n-1,a,c,b);
        printdisk(a,c);
        hanoi(n-1,b,a,c);
    }
}
void main()
{
    int n;
    printf("input n:\n");
    scanf("%d",&n);
    hanoi(n,'A','B','C');
}


沙发
发表于 2016-2-26 22:26:30 | 只看该作者
其实就是把n层的hanoi问题转换成n-1层的hanoi问题
找个n=3的情况试验一下就明白了

第一个柱子 (a, b, c)
第二个柱子 ()
第三个柱子 ()

先把ab都移动到第二个柱子上,然后把c移动到第二个柱子上,最后再把ab从第二个柱子移动到第三个柱子

第一大步其实就是n=2的情况,第三大步也是n=2的情况,只是变了变柱子编号
板凳
 楼主| 发表于 2016-3-20 13:16:18 | 只看该作者
rosynirvana 发表于 2016-2-26 22:26
其实就是把n层的hanoi问题转换成n-1层的hanoi问题
找个n=3的情况试验一下就明白了

谢谢,今天才看到
地板
 楼主| 发表于 2016-3-20 13:16:22 | 只看该作者
rosynirvana 发表于 2016-2-26 22:26
其实就是把n层的hanoi问题转换成n-1层的hanoi问题
找个n=3的情况试验一下就明白了

谢谢,今天才看到
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表