鱼C论坛

 找回密码
 立即注册
查看: 5378|回复: 7

[已解决]汉诺塔问题

[复制链接]
发表于 2017-7-31 15:05:49 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>

void main()
{
    void hanoi(int n,char a,char b,char c);
    int n;
    printf("请输入要移动的块数:");
    scanf("%d",&n);
    hanoi(n,'a','b','c');
}

void hanoi(int n,char a,char b,char c)
{
    if(n==1)
        printf("\t%c->%c\n",a,c);   
    else
    {
        hanoi(n-1,a,c,b);            
        printf("\t%c->%c\n",a,c);
        hanoi(n-1,b,a,c);         
    }
}


这个程序是没问题的,实际的移动问题我是清楚的,但是这种递归程序的内部是怎么运行的我不太清楚,进行调试了也看不懂..因为也是一下子输出一堆...
比如说我以3为例子,输出中有一个c->b
比如说这个语句是怎么输出的啊...代码中哪个语句输出了这个内容啊...,可以的话以3为例子..一个输出一个输出的说一下呗..不行的话,大概说一下也行,我再看看..谢谢了~
最佳答案
2017-7-31 21:56:30
野良神yls 发表于 2017-7-31 19:38
还是不懂..就像我说的..第三个输出为什么会是c->b啊

还是做个图吧,你看看移动的次序。
360截图20170731145928370.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-31 16:29:53 | 显示全部楼层
石沉大海...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-31 16:49:21 | 显示全部楼层
递归不是把问题复杂化,而是使编程更符合人类的思维方式。
我们把三根柱子分别作为“起点”、“临时”和“目标”。目的是把n个圆盘从“起点”移到“目标”。
1,首先,把上面n-1个移到“临时”上,至于怎么移,等会儿再说。
2,然后把第n个移到“目标”上,这步是实打实的移动,所以用printf
3,最后再把上面n-1个移到“目标”上。完成全过程。
1和3怎么移动,这里就用到了递归,只是“起点”、“临时”和“目标”变化了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-31 18:54:44 | 显示全部楼层
想了解内部是怎么运行   提升知识,学一下汇编
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-31 19:38:25 | 显示全部楼层
冬雪雪冬 发表于 2017-7-31 16:49
递归不是把问题复杂化,而是使编程更符合人类的思维方式。
我们把三根柱子分别作为“起点”、“临时”和“ ...

还是不懂..就像我说的..第三个输出为什么会是c->b啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-31 19:38:59 | 显示全部楼层
ba21 发表于 2017-7-31 18:54
想了解内部是怎么运行   提升知识,学一下汇编

好吧..我先把c的基础学完再说吧..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-31 21:56:30 | 显示全部楼层    本楼为最佳答案   
野良神yls 发表于 2017-7-31 19:38
还是不懂..就像我说的..第三个输出为什么会是c->b啊

还是做个图吧,你看看移动的次序。
1.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-7-31 23:46:19 | 显示全部楼层
冬雪雪冬 发表于 2017-7-31 21:56
还是做个图吧,你看看移动的次序。

明白了,我对hanoi函数中abc的理解有误,我还以为比如 hanoi(2,a,c,b)执行后是hanoi(1,a,c,b)..原来后一个函数对应的是前一个函数中的abc.
谢谢大佬了~
哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 05:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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