| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 342 人关注过本帖
标题:关于汉诺干塔问题的一些疑问
只看楼主 加入收藏
奋斗猪
Rank: 2
来 自:奋斗的途中
等 级:论坛游民
帖 子:43
专家分:91
注 册:2012-7-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
关于汉诺干塔问题的一些疑问
之前看过汉诺塔的一个思路是这样的。先把n-1个从f通过t到b,然后把第n个从f到t;最后把n-1个从b通过f到t。
写成代码为
int hanoi(int n,char f,char b,char t){
    hanoi(n-1,f,t,b);
    printf("%c => %c\n",f,t);
    hanoi(n-1,b,f,t);
}

我很纠结的是他为什么可以有这样的思路?
这样的思路怎么写成这样的代码呢?

我这样想为什么就不可以了?
我先把n-1个从f通过t移到b,然后把第n个从f移到t;再同样的道理先把n-1个从b通过t移到f,再把第n个从b移到t;(这里我不懂的是他为什么可以把剩下的一次移过去)以此递推
写成代码为
int hanoi(int n,char f,char b,char t){
    hanoi(n-1,f,t,b);
    printf("%c => %c\n",f,t);
    hanoi(n-1,b,t,f);
    printf("%c => %c\n",b,t);
}

这里运行结果错误,是不是柱子也应该跟着动呢?

2012-07-13 01:10
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:5 
汉诺塔是一个典型的递归程序...
看看数据结构与算法吧

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-07-13 06:52
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:15 
你写的递归程序怎么连结束条件都没有?

多思考你就明白了,很简单的一个东西。

柱子不用跟着动,只不过是因为你的盘子数量不同,移动的方法不同而已。

比如:

1个盘子的时候,那么直接把盘子从1移动到3。

当两个盘子的时候,那么先要把第一个盘子从1移动到2,再把第二个盘子从1移动到3,再把第一个盘子从2移动到3。

同样是第一个盘子,第一步移动的方向是不同的,这些递归程序里面已经帮你解决了。
2012-07-13 09:05
奋斗猪
Rank: 2
来 自:奋斗的途中
等 级:论坛游民
帖 子:43
专家分:91
注 册:2012-7-4
收藏
得分:0 
回复 3楼 demonleer
恩恩,落写了一个if(n).

贵在坚持!
2012-07-13 22:27
奋斗猪
Rank: 2
来 自:奋斗的途中
等 级:论坛游民
帖 子:43
专家分:91
注 册:2012-7-4
收藏
得分:0 
回复 2楼 peach5460
这个我刚学c,还没接触到数据结构和算法。我找找资料看看去

贵在坚持!
2012-07-13 22:30
快速回复:关于汉诺干塔问题的一些疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049352 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved