汉诺塔
- 汉诺塔规则:
- 1.每次只能移动一个盘子
- 2.任何一次移动,一个塔的状态,必须是小盒子在上,大盒子在下
- 移动方法:
-
n = 1 :直接把A上面的一个盘子移动到C上 A->C
-
n = 2 :
- A.把小盘子从A放到B上 A->B
- B.把A上剩下的最大盘子移动到C上去 A->C
- C.把B上两个盘子,借助于A,挪到C上去,调用递归 B->C
- 需要3步
-
n = 3:
- A.把A上面两个盘子,通过C移动到B上去,调用递归
- B.把A上剩下的一个盘子挪到C上去,A->C
- C.把B上n-1盘子,借助于A,移动到C上去,调用递归
- 需要7步
-
n = n:
A.把A上的n-1个盘子,借助于C,移动到B上去,调用递归
B.把A上的最大盘子,也是唯一一个,移动到C上,A->C
C.把B上n-1个盘子,借助于A,移动到C上,调用递归def hano(n,a,b,c): """ 汉诺塔的递归实现(n =64) :param n: 代表几个盘子 :param a: 代表第几个塔 :param b: 代表第二个塔,中间过渡的塔 :param c: 代表第三个塔 :return: """ if n ==1: print(a,"-->",b) #如果只有一层,直接从a移动到b else: hano(n-1,a,c,b) #将前63个盘子从a移动到b上(借助c) print(a,"-->",c)#将最底下的第64个盘子从a移动到c上 hano(n-1,b,a,c)#将b上面的63个盘子移动到c上 a = "A" b = "B" c = "C" n = int(input("请输入汉诺塔层数:")) hano(n,a,b,c) a="A" b="B" c="C" n=1 hano(n,a,b,c)
-