汉诺塔游戏中的递归算法
来源:互联网 发布:数据库中的模式是 编辑:程序博客网 时间:2024/04/29 16:09
算法的学习:递归 汉诺塔游戏
首先,把上层和底座视作两个部分(简称 上,下)
整体移动至C柱可视为两个步骤:
1,‘上’移动至B
2,‘下’移动至C
3,‘上’移动至C
把A上的最大盘移动到C盘,移动后的状态:
中间状态: A:空的。B:n-1个盘子。C:有一个最大盘(第n个盘子)
要注意的一点是:这时候的C柱其实可以看做是空的。因为此时C柱上的圆盘不需要再移动,剩下的所有盘子都比它小,它们中的任何一个都可以放在上面,也就是C柱上。
所以现在三个柱子的状态:
中间状态: A:空的。B:n-1个盘子。C:空的
当你搞清楚上面的状态时,这个问题就解决了一半了
由于‘上’是n-1个圆盘的组合,我们发现,步骤1和步骤3最为复杂,必然要借助另外一根柱子完成转移,不妨称之为工具柱
此时定义一个函数 move可以完成要:”借助另外一根柱子完成转移“的动作
函数的形式为 move(‘上’,原柱子,工具柱,目标柱子)
此时步骤为:
1,A(原柱)的‘上’,通过C(工具柱)移动至B(目标柱) move(n-1,A,C,B)
状态 A:第n个盘子。 B:有序的n-1个盘子。 C:空的
2,A的‘下’,移动至C A–>C
3,B(原柱)的‘上’,通过A(工具柱)移动至C(目标柱) move(n-1,B,A,C)
状态: A:空的。 B:有序的n-1个盘子。 C:第n盘子(可看为空柱)
这三步实现的动作是: 圆盘在(原柱),通过(工具柱),移动至(目标柱)
此时的问题变成了将B柱的n-1个盘子移动至C ,如果你做了这个动作,很好,我们完美的完成了一次递归。
python代码奉上:
def move(n, a, b, c): if n==1: return a,'-->',c move(n-1,a,c,b) print a,'-->',c move(n-1,b,a,c)move(3, 'A', 'B', 'C')
- 汉诺塔游戏中的递归算法
- 汉诺塔游戏-递归算法python
- 递归函数+python中的汉诺塔递归算法
- 金字塔游戏 递归算法
- Python中的汉诺塔递归算法
- #python中的汉诺塔递归算法代码分析
- oracle中的递归算法
- orcale中的递归算法
- Java中的递归算法
- 递归--汉诺塔游戏
- 汉诺塔游戏(递归)
- 游戏中的常用算法
- 【游戏中的算法】取火柴游戏算法
- 九连环游戏算法递归实现
- java中的递归调用算法
- 游戏接口平台开发中的复杂递归
- 汉诺塔-递归算法和非递归算法
- 汉诺塔 算法(递归和非递归算法)
- hibernate中one-to-one两种配置方式
- 为什么设计泛型?
- ALGORITHMIC COMPOSITION AS A MODEL OF CREATIVITY
- 52. N-Queens II
- const 的简要介绍
- 汉诺塔游戏中的递归算法
- CodeForces 551E GukiZ and GukiZiana 【分块】
- 单片机中用lcd显示电池充电
- hdu 5573 Binary Tree
- 以生活例子说明单线程与多线程
- Linux_Hi3518 SDK 安装以及编译出错分析
- java小知识点(1)
- 欢迎使用CSDN-markdown编辑器
- Android 小项目之---- 计算器 使用同一个事件监听完成 加减乘