汉诺塔(Hanoi Tower)
问题分析
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。
问应该如何操作?
递归的思想就是把难题简单化,假设三根柱子我们分别命名为A、B、C
,我们的想法就是把A上的圆盘转移到C柱上。
- 假设A盘只有一个圆盘,那么我们只需要执行A->C
- 假设A盘有两个圆盘,那么我们需要执行A->B,A->C,B->C
- 假设A盘有三个圆盘,那么我们需要执行A->C,A->B,C->B,A->C,B->A,B->C,A->C
我们发现若A柱上的圆盘增加一个,需要执行的次数成会越来越多,这样写下去不仅麻烦,还容易写错。执行的次数为n ^ 2 -1,若A柱上有6个,就需要移动63次,所以我们会这样想:如果有人把A柱上的前5个都先转移到B柱上,那么我只需要将A柱上的第6个圆盘转移到C柱上,再将B柱上的5个转移到C柱上不就可以了。
通过以上分析,我们假设要移动n个圆盘,那么相对应的就应该有三步:
- 将n-1个圆盘从A柱移动到B柱
- 将第n个圆盘从A柱移动到C柱
- 将n-1个圆盘从B柱移动到C柱
整理好思路,我们来看递归代码
代码实现
//设置静态变量,记录执行的次数
static int m=0;
//打印输出将圆盘从A柱上移动到C柱上,
public static void move(char A,char C){System.out.println("第"+(++m)+"次"+"移动,将"+A+"移到"+C);}//定义A,B,C柱,n代表A柱上的圆盘数量,//实际上这个函数是将A柱上的圆盘移动到c柱,B柱只是辅助盘
public static void hnota(int n,char A,char B,char C){if(n==1) {//当A柱上只有一个圆盘时,直接移动,这也是终止条件Test.move(A,C);}else{//将n-1个圆盘从A柱移动到B柱hnota(n-1,A,C,B);//将第n个圆盘从A柱移动到C柱move(A,C);//将n-1个圆盘从B柱移动到C柱,将A柱作为辅助柱hnota(n-1,B,A,C);}}
大家可以参照我这个自己动手写一下,最后附上代码(n==4)运行结果:
汉诺塔(Hanoi Tower)相关推荐
- 汉诺塔(hanoi tower)游戏
问题 递归实现汉诺塔 算法实现 #include <stdio.h> void hanoi( int n, char a, char b, char c) {if( n > 0 ) ...
- c语言程序设计电子图书 汉诺塔,用C写的汉诺塔(hanoi)程序
用C写的汉诺塔(hanoi)程序 分类:计算机等级 | 更新时间:2016-07-07| 来源:转载 #include void movedisc(unsigned n,char fromneedle ...
- 【头歌】汉诺塔(Hanoi)的递归算法
任务描述 本关任务:汉诺塔(Hanoi)的递归算法. 相关知识 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到 ...
- 汉诺塔(Hanoi)递归算法
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘. 游戏的目标:把A杆上的金盘全部移到C杆 ...
- 汉诺塔(the Tower of Hanoi )
问题 初始时,给定3根柱子A,B,C,N个大小不一的圆盘,这些圆盘从小到大排列在其中的一根柱子上,假设为A,现在要通过B,将这N个圆盘全部移动到C柱子上,每次只能移动一个,移动的过程中不许出现大盘子放 ...
- 分治法基本思想(汉诺塔问题 Tower of Hanoi)
文章目录 前言 基本思想 适用的问题 求解步骤 分治法要点 时间复杂性分析 举例-汉罗塔问题(Tower of Hanoi) 问题描述 解决步骤 java代码 前言 分治法来源于孙子兵法谋攻篇中写道- ...
- 汉诺塔(Tower of Hanoi) 递归代码实现 c语言(顺序栈实现)
文章目录 c语言简化版 C语言强化版(能看到每一步每个塔的情况)(使用了顺序栈库) main.c sequential_stack.cpp sequential_stack.h 运行结果 找了个汉诺塔 ...
- 汉诺塔(Tower of hanoi)
汉诺塔游戏两种模式:传统模式(7关)和解密模式(13关) 最后一关10个盘子(需要移动1023次) 图标: [img]http://dl.iteye.com/upload/attachment/289 ...
- 汉诺塔(Tower of Hanoi)--------递归思路
汉诺塔问题简介: 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移到柱子C上,并且每次移动,同一根柱子上都只能是大盘子在下,小盘子在上,请 ...
- 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版...
课本源码部分 第3章 栈和队列 - 汉诺塔(Hanoi Tower)问题 --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版> ...
最新文章
- 帅气逼人的Redis可视化工具
- YOLOv5 它来了!基于 PyTorch,体积比 YOLOv4 小 90%,速度却超 2 倍!
- c语言输入数字变成星期几,C语言程序设计: 输入年月日 然后输出是星期几
- 心得体悟帖---15、我的灵魂
- 电路基础知识 -- 数模信号
- Linux信号的使用
- python pp模块_Python模块--Pexpect
- 因子分析——python
- 爬虫5-BeautifulSoup模块简解
- 内部排序比较(Java版)
- Julia对矩阵进行预先赋值
- 线性支持向量分类机及其实现
- 关于SQL\SQL Server的三值逻辑简析
- Ubuntu中触摸板如何开启,关闭
- 宇宙最强API接口调试工具Apipost
- C#使用iTextSharp打印PDF
- 考研二战日记-第11天——高数2.1 导数概念
- OSWatcher的安装使用
- 几个免费的长链接缩短链接工具
- Linux服务篇--LAMP架构
热门文章
- 啊哈 , 算法 !--深度优先搜索( C语言版 )
- 通过PS把普通数码照片制作成素描照片
- Python 他来了,他来了!
- [转]俞敏洪:我和马云就差了8个字... [来自: news.mbalib.com]
- 浏览器及Windows常用快捷键汇总
- 乐乐音乐播放器 欢迎页面(二)
- 优秀课程案例:母亲节!用Scratch编程送给母亲最好的贺卡礼物!
- 从高级语言实现ads 通信_4000通讯ADS通讯-高级语言-资源下载-读根文库
- PHP民俗文化管理系统,中国民俗文化
- 摩尔定律即将走向终结?对未来更广阔世界影响的55个预测!