汉诺塔问题分析
创作时间:
作者:
@小白创作中心
汉诺塔问题分析
引用
CSDN
1.
https://blog.csdn.net/2401_83283514/article/details/137691031
汉诺塔问题是在递归学习中一个非常有意思的问题,是一道经典的智力游戏,也被称为河内塔或汉诺威塔。游戏的目的是通过一系列的移动,将一组大小不一的矩形条从一个柱子全部移动到另一个指定柱子上。我们来看一下汉诺塔游戏的规则:
- 游戏开始时,所有的矩形条全部堆叠在最左侧柱子上,并且最大的矩形条在最底侧,最小的在最顶侧。
- 玩家的目标是把这些矩形条全部移动到最右侧柱子上,同样最大的矩形条在最底侧,最小的矩形条在最顶侧。
- 在移动过程中,玩家每次只能移动一个矩形条,并且只能在三个柱子间移动。
- 移动过程中,小矩形条不能在大矩形条下面,即大矩形条必须在底部,小矩形条必须在顶部。
- 玩家不能使用额外的空间或者临时的柱子来帮助移动矩形条
完成汉诺塔问题的步骤:
- 将最顶层的矩形条从图一移动到柱子即图三上;
- 然后把图一中介于两者大小之间的矩形条移动到柱子即图二上;
- 把图三中的矩形条移动到图二上;
- 把图三中最大的矩形条移动到图三上;
- 把图二中较小的矩形条移动到图以上;
- 再把图二上剩余的一个矩形条移动到图三上;
- 最后再把图以上的矩形条移动到图三即可。
通过这个我们可以发现一个规律:有三个矩形条移动了7次即2^3-1;也就是说如果有n个矩形条的话移动了2^n-1次。
那么接下来我们就来看代码部分:
#include<stdio.h>
void move(char A,char B)
{
printf("%c->%c\n",A,B);
}
//n:矩形条的个数
//pos1:即图一所在柱子
//pos2:图二所在柱子
//pos3:图三所在柱子
void Hanio(int n,char pos1,char pos2,char pos3)
{
if(n==1)
{
move(pos1,pos3);
}
else
{
Hanio(n-1,pos1,pos3,pos2);//此时pos1是起始位置,pos3是辅助位置,pos2是目标位置
move(pos1,pos3);//这个时候图一所在位置仅剩下一个矩形条,移动到目标柱子图三即可
Hanio(n-1,pos2,pos1,pos3);//此时pos2是起始位置,pos1是辅助位置,pos3是目标位置
}//用到了递归的思想
}
int main()
{
int n=0;
scanf("%d",&n);
Hanio(n,'a','b','c');
return 0;
}
汉诺塔游戏关键在于策略和逻辑思维,并把一个实际问题转化为代码的能力。这至关重要,对函数学习中递归的思想起到了很大的帮助,更加突出递归的魅力:把一个复杂的问题转化为一串逻辑简单的代码。通过解决汉诺塔问题,我们可以自己的问题解决能力和策略规划能力。
相信大家都一定会有所收获!
热门推荐
碘伏杀菌能力竟然这么强?发明碘伏的人真是个天才,你怎么看?
子女未成年可以继承遗产吗
如何制定ChatGPT使用政策:5个重要步骤
高情商和女孩聊天话题少,如何打破与女孩聊天的话题局限
幼升小、小升初、初升高,家长如何帮孩子做好学段衔接
考古发现:巨人族传说并非空穴来风:考古学家疑似找到证据
领略中古时代风光:10款中世纪题材游戏推荐
白噪音能帮助睡眠吗?使用注意事项?有缺点、副作用吗?
2025年1月西安二手房成交量环比下跌36.8%
韩国电影《夏娃的诱惑》:一场跨越现实与梦境的奇幻之旅
9.9元的健身体验课,被年轻人薅疯了
现役NBA中锋:传承黄金时代统治力的挑战者
车辆安全管理制度如何完善
外汇黄金量化交易常见的策略
质子与中子差异比较
西伯利亚花栗鼠的饲养方法(打造舒适、健康的花栗鼠家园)
美国比中国强在哪?专家:中国从14亿人中选人才,而美国则是77亿
云盘文件如何禁止下载保存
新屋入伙必读:从0到1的家具选购攻略
修仙门派的弟子职位等级体系详解
全国首例!烂尾楼业主集中退房退首付,退房条件竟如此苛刻
经济补偿金是否包含年终奖?法律解析来了
为什么是杭州出了Deepseek、宇树机器狗和《黑神话·悟空》?
淘宝如何区别真假代购店?专柜代购是否正品?代购有风险,购物要仔细甄别
期货交易的操作方式有哪些?期货左侧交易的风险如何控制?
如何查看iPhone和iPad上的存储空间
河道绿化中关于水生植物种植的重要作用
国产车质量不如合资品牌?研究:电动汽车故障率大幅下降
台海隧道简介
雅思8分经验6:口语考试的常见话题及回答技巧