递归求解汉诺塔问题 - Python实现

汉诺塔(港台:河内塔)是根据一个传说形成的数学问题:

有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:

  1. 每次只能移动一个圆盘;
  2. 大盘不能叠在小盘上面。

提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。

问:如何移?最少要移动多少次?                                           

                                                                                                                                                                     --维基百科

递归求解汉诺塔问题 - Python实现_第1张图片

求解代码如下(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',)

 

 

 

你可能感兴趣的:(Python,算法题)