汉诺塔游戏比较适合用递归的思想去理解。分享自己写的代码
# """
# 汉诺塔游戏 递归算法
# 有三个台子,s为始,e为终,t为中间过渡
# """
class Hannota():
def __init__(self, src, des, tmp):
'''
name three plats
all string type
'''
self.src = src
self.des = des
self.tmp = tmp
self.i = 0
def operation(self, num):
'''
opeartion of moving blocks
num: psitive integer
'''
return self._operation(num, self.src, self.des, self.tmp)
def count(self,num):
'''
count times of move bloks
num: psitive integer
'''
return 2**num - 1
def _operation(self, num, src, des, tmp):
if num<=0:
return None
if num==1:
self.i += 1
print("第 ",self.i,"步: 把 "+src+" 顶上的块挪到 "+des+" 上面去")
return
if num==2:
self._operation(1, src, tmp, des)
self._operation(1, src, des, tmp)
self._operation(1, tmp, des, src)
if num>2:
self._operation(num-1, src, tmp, des)
self._operation(1, src, des, tmp)
self._operation(num-1, tmp, des, src)
aa = Hannota("s", "e", "t")
aa.operation(5)
下面是实现效果
第 1 步: 把 s 顶上的块挪到 e 上面去
第 2 步: 把 s 顶上的块挪到 t 上面去
第 3 步: 把 e 顶上的块挪到 t 上面去
第 4 步: 把 s 顶上的块挪到 e 上面去
第 5 步: 把 t 顶上的块挪到 s 上面去
第 6 步: 把 t 顶上的块挪到 e 上面去
第 7 步: 把 s 顶上的块挪到 e 上面去
第 8 步: 把 s 顶上的块挪到 t 上面去
第 9 步: 把 e 顶上的块挪到 t 上面去
第 10 步: 把 e 顶上的块挪到 s 上面去
第 11 步: 把 t 顶上的块挪到 s 上面去
第 12 步: 把 e 顶上的块挪到 t 上面去
第 13 步: 把 s 顶上的块挪到 e 上面去
第 14 步: 把 s 顶上的块挪到 t 上面去
第 15 步: 把 e 顶上的块挪到 t 上面去
第 16 步: 把 s 顶上的块挪到 e 上面去
第 17 步: 把 t 顶上的块挪到 s 上面去
第 18 步: 把 t 顶上的块挪到 e 上面去
第 19 步: 把 s 顶上的块挪到 e 上面去
第 20 步: 把 t 顶上的块挪到 s 上面去
第 21 步: 把 e 顶上的块挪到 t 上面去
第 22 步: 把 e 顶上的块挪到 s 上面去
第 23 步: 把 t 顶上的块挪到 s 上面去
第 24 步: 把 t 顶上的块挪到 e 上面去
第 25 步: 把 s 顶上的块挪到 e 上面去
第 26 步: 把 s 顶上的块挪到 t 上面去
第 27 步: 把 e 顶上的块挪到 t 上面去
第 28 步: 把 s 顶上的块挪到 e 上面去
第 29 步: 把 t 顶上的块挪到 s 上面去
第 30 步: 把 t 顶上的块挪到 e 上面去
第 31 步: 把 s 顶上的块挪到 e 上面去