Python解决汉罗塔问题(递归)
2020-03-29 18:58
302 查看
汉罗塔问题
汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
问题解决--用递归思想
假设塔有 n 层,从A移动到B,辅助是C。
如果塔只有一层,直接将盘子从A移动到B:A->B
如果塔有两层,先将小盘子从A移动到C,再将大盘子从A移动到B,最后将小盘子从C移动到B:A-> C; A->B; C->B。
类似,如果有n层,只需要先将n-1层移动到C,再将最后一个盘子移动到B,再将n-1层从C移动到B。所以,可以归纳为以下三个步奏:
- hanoi(n-1,A,C,B) #第一个参数表示层数,第二三四分别表示从A到C,辅助位B
- A->B #A移动到B
- hanoi(n-1,B,C,A)
Python代码
def hanoi(n, a = 'A', b = 'B', c = 'C'): #level = n, A->B print 'level = %d' %n if n == 1: print '%d: %s -> %s' % (n,a,b) else: hanoi(n-1, a, c, b) print '%d: %s -> %s' % (n,a,b) hanoi(n-1, c, b, a)
运行结果:
print 'level = 1' hanoi(1) print 'level = 3' hanoi(3) -------------------------------------------------------------- level = 1 1: A -> B level = 3 1: A -> B 2: A -> C 1: B -> C 3: A -> B 1: C -> A 2: C -> B 1: A -> B
转载于:https://www.cnblogs.com/zhaoxy/p/4974938.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python中解决递归限制的问题
- 使用Python来解决卡诺塔即递归问题
- python 使用递归回溯完美解决八皇后的问题
- Python小作业 运用递归解决汉诺塔问题(数学角度)
- Python 初学笔记:递归解决0-1背包问题
- 用Python递归解决阿拉伯数字转为中文财务数字格式的问题
- 递归解决汉罗塔问题到底多么简单
- Python初学笔记:递归解决汉诺塔问题
- Python递归解决汉诺塔问题
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- Python递归解决AOE网络最长路关键路径的问题
- python递归解决经典汉若塔问题
- python基于递归解决背包问题详解
- python 递归调用返回None的问题及解决方法
- 经典递归解决汉诺塔问题 python实现
- Python练习(2):递归解决汉诺塔问题
- 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法
- Python字符串的encode与decode研究心得——解决乱码问题
- python2.6使用mysql包出现的一些问题以及解决办法
- 备忘录和递归解决背包问题