汉诺塔(Hanoi)递归算法
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。
游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
一、汉诺塔问题c语言代码:
#include<stdio.h>
void f(int n,char a,char b,char c)
{if(n>0)//递归终止条件 {f(n-1,a,c,b);//a→b printf("第%d个盘子:%c->%c\n",n,a,c);//n→c f(n-1,b,a,c);//b→c }
}
int main()
{int n;printf("please input numbers:\n");while(scanf("%d",&n)!=EOF){f(n,65,66,67);//传值给函数 }return 0;
}
执行三次后的情况:
二、汉诺塔的通项公式
递推公式: H(k)=2H(k-1)+1。
通项公式(有n个圆盘,全部完成需要的次数):sum=2^n-1。
三、汉诺塔问题的时间复杂度
由其多项公式可知时间复杂度为O(2^n)。
四、可视化图解
有3个圆盘时:
有10个圆盘时
四、总结
汉诺塔永远只有三步!
1.将A上面的n-1个盘子移到B上,即An-1次
2.将第n个盘子移到C上,一次就好
3.将B上面的两个盘子,移到C上,即An-1次
试着单纯从外部去理解汉诺塔递归问题,进入递归内部容易晕。
汉诺塔(Hanoi)递归算法相关推荐
- 【头歌】汉诺塔(Hanoi)的递归算法
任务描述 本关任务:汉诺塔(Hanoi)的递归算法. 相关知识 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到 ...
- 理解 Hanoi 汉诺塔非递归算法
汉诺塔介绍: 汉诺塔(港台:河内塔)是根据一个传说形成的数学问题: 最早发明这个问题的人是法国数学家爱德华·卢卡斯. 传说越南河内某间寺院有三根银棒,上串 64 个金盘.寺院里的僧侣依照一个古老的预言 ...
- 汉诺塔(Hanoi)问题归纳总结
一.汉诺塔问题及其递归算法 1.问题阐述 经典汉诺塔: 外文算法书对汉诺塔问题的描述: 2.算法步骤 三阶汉诺塔问题解题步骤 共需7步. 四阶汉诺塔问题解题步骤 共需15步 五阶汉诺塔问题解题步骤 可 ...
- c语言程序设计电子图书 汉诺塔,用C写的汉诺塔(hanoi)程序
用C写的汉诺塔(hanoi)程序 分类:计算机等级 | 更新时间:2016-07-07| 来源:转载 #include void movedisc(unsigned n,char fromneedle ...
- 汉诺塔问题——递归算法
一.问题描述 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘 ...
- 关于汉诺塔非递归算法的一点思考
前段时间做编译课设时老师提到了汉诺塔的非递归不容易做出来,于是我趁着寒假有点时间就想试着搞一搞.下面我把我的一些草稿先列出来,以免以后忘记. 下面这个模型是适合于偶数个盘片的情况的.奇数的情况类似可得 ...
- 汉诺塔问题递归算法python代码_[python]汉诺塔问题递归实现
一.问题描述及算法步骤 汉诺塔问题的大意是有三根柱子a, b, c,现在a柱有N个盘子从下往上尺寸递减排列,要求: 1. 将a上的盘子移动到c柱上; 2. 每次移动一个盘子; 3. 柱子上的盘子始终必 ...
- 彻底解决汉诺塔问题——递归算法
关于递归: 一定不要试图跟踪大型递归的过程! 要写出递归,关键就是找出递归的递归方程式: 也就是说,要完成最后一步,那么最后一步的前一步要做什么. 1)在求f(n, other variables)的 ...
- 汉诺塔(递归算法)C语言
河内之塔 说明 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的, 河内为越 战时北越的首都, 即现在的胡志明市: 1883年法国数学家 Ed ...
最新文章
- Linux 内核源代码分析 chap 2 存储管理 (5)
- Cobbler部署指南之Cobbler安装操作系统篇
- (转)flex中使用swc实现更好的界面代码分离
- 被忽略的知识点——switch语句
- JSP的session处理
- elementUI组件el-dropdown - 踩坑篇
- JavaWeb——mybatis一对一、一对多查询
- LuaForUnity6:Lua模块
- Java CSV操作(导出和导入)
- 匿名页反向映射得建立
- python少儿图形编程软件_现在最好的少儿编程软件是什么?
- iOS 10.1发现新漏洞:可绕过“激活锁”强行进入主屏
- php网站开题报告该怎么答辩,如何应对开题报告答辩?看完你就明白了
- Unity获取真实地理地图应用Terrain笔记
- 死亡测试 - GoogleTest(五)
- Ceres-Solver安装与简介
- 现代循环神经网络 - 机器翻译与数据集
- 把数字金额转换成中文大写数字
- vs好用吗?vs2022下载。
- linux修改英文设置密码,linux 如何修改passwd的密码 设置密码