三柱汉诺塔问题
汉诺塔问题是法国数学家Edouard Lucas在1883年根据传说提出来的。传说在一个印度教寺庙里,由三根柱子,其中一根套着64个由小到大的黄金盘片,僧侣们的任务就是要把一叠黄金盘从一根柱子搬到另外一根,但是有两个规则:
- 一次只能移动一个盘子
- 大盘子不能叠在小盘子上
三柱汉诺塔是经典的递归算法问题,其基本思路是
- 1.将前n-1个盘子经由3#号柱子移动至2#柱子
- 2.将第n个盘子移动至3#号柱子
- 3.将前n-1个盘子经由1#号柱子移动至3#号柱子
Python代码实现如下:
def movedisk(disk,frompole,topole):
print('{}:{}->{}'.format(disk,frompole,topole))
def movetower(height,frompol,topol,endpol):
if height>=1:
movetower(height-1,frompol,endpol,topol)
movedisk(height,frompol,endpol)
movetower(height-1,topol,frompol,endpol)
movetower(3,'a','b','c')
1:a-&g