作者:伍贤厚_197 | 来源:互联网 | 2024-10-24 10:30
汉诺塔问题作为经典的递归算法案例,其不仅涉及数学逻辑,还深刻体现了数据结构的应用。该问题起源于古老的印度传说,通过分析不同规模的汉诺塔移动策略,可以深入理解递归函数的设计与实现。视频资源(链接:https://www.bilibili.com/video/av18710547?p=34)提供了直观的演示,帮助学习者更好地掌握这一算法的核心概念及其在实际编程中的应用。
可参考视频:https://www.bilibili.com/video/av18710547/?p=34
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?
问题:有X,Y,Z三根柱子,在X柱子上从下往上按照大小顺序放着64片圆盘。把这64个圆盘从X柱子上摆放到Z柱子上,并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?
1 #include
2
3 void Move(int n, char X, char Y, char Z) //从上到下依次为第1,第2...第n个盘子
4 {
5 if(n == 1)
6 printf("%c-->%c\n", X, Z);
7 else
8 {
9 Move(n-1, X, Z, Y); //将n-1个盘子从X 借助Z 移动到Y上
10 printf("%c-->%c\n", X, Z); //将第n个盘子从X上直接移动到Z上
11 Move(n-1, Y, X, Z); //将n-1个盘子从Y 借助X 移动到Z上
12 }
13 }