基于C语言和递归思想实现汉诺塔
2020-03-29 18:39
204 查看
汉诺塔是源于印度一个古老传说的益智玩具。
传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
运行以下代码后归纳可得:转移N个圆盘需要移动2N-1次。
所以,婆罗门一共需要移动圆盘264-1次。
试玩这个小游戏,体验婆罗门的绝望:http://www.4399.com/flash/109504_1.htm
//hanoi.c #include<stdio.h> //#汉诺塔(hanoi)# //有A B C三个木桩。 //木桩A上有N个圆盘,编号1到N,按编号从上往下排列,小在上,大在下。木桩B和C上是空的。 //问题:如何把A上的圆盘都移到C上,圆盘要仍然按原来的顺序排列。 //规则:可以借助B;每次只能移动一个顶端圆盘;不能将编号大的圆盘压在编号小的圆盘上。 void hanoi(int, char, char, char); int main() { int n; char a = 'A'; char b = 'B'; char c = 'C'; printf("请输入汉诺塔圆盘数:"); scanf_s("%d", &n); hanoi(n, a, b, c); return 0; } void hanoi(int n, char A, char B, char C) { if (n == 1) { printf("将编号为%d的圆盘从%c移到%c\n", n, A, C); } else { hanoi(n - 1, A, C, B); printf("将编号为%d的圆盘从%c移到%c\n", n, A, C); hanoi(n - 1, B, A, C); } } //函数hanoi的逻辑: //n表示圆盘数,ABC代表将一定数量的圆盘从A借助B移到C上。 //如果 只有1个圆盘, //则直接将A上的圆盘移到C上。 //否则 先将A上的n-1个圆盘借助C移到B上, //再将A上剩余的最后1个圆盘移到C上, //最后将B上的n-1个圆盘借助A移到C上。
本文代码运行环境为Visual Studio Community 2019 16.4.6版本。
代码内容主要来自郝斌老师的课程https://www.bilibili.com/video/av6159200
如有疑问或建议,欢迎留言讨论。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 基于递归思想的组合、H变换等几个算法实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- c语言汉诺塔演示程序设计(基于堆栈、递归)
- 快速排序(基于算法导论思想)的C语言实现
- 第三篇:汉诺塔算法——C语言递归实现
- <C语言>递归思维及其实现-----汉诺塔问题
- C语言实现Hanoi(汉诺塔)问题的递归求解
- 汉诺塔递归的c语言实现(递归)
- C语言递归实现汉诺塔问题
- C语言 N阶汉诺塔问题的递归实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- C语言经典算法(十)——递归实现汉诺塔
- 算法思考--------汉诺塔c语言实现-------递归
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 【经典问题】汉诺塔(递归、C语言实现)
- 【年少的风】递归实现汉诺塔
- 实现汉诺塔(Hanoi)问题(堆栈、递归)
- 简短意赅的用思维导图理解python递归实现汉诺塔
- C语言:用递归实现将输入的整数按逆序输出。如输入12345,则输出54321。
- 网络编程:基于C语言的简易代理服务器实现(proxylab)