汉诺塔(港台:河内塔)是根据一个传说形成的数学问题:
有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:
提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。
问:如何移?最少要移动多少次?
--维基百科
求解代码如下(n=9时):
cnt = 1
def move(id, ori, to): # 打印移动方式:编号,从哪个盘子移动到哪个盘子
global cnt
print("第{}步: 将{}从{}移至{}".format(cnt, id, ori, to))
cnt+=1
def hanoi(n, x, y, z):
if n == 0:
return
hanoi(n - 1, x, z, y);
move(n, x, z);
hanoi(n - 1, y, x, z);
hanoi(9, 'A', 'B', 'C',)