汉诺塔问题-----Python(递归)
汉诺塔问题说的是,给汉诺塔中的三根柱子按分别命名为 A,B,C,其中A柱上有n个盘子(n>=1),怎样把A柱上的盘子全部移动到C柱上
移动的规则:
1. 每次只能移动一个盘子
2. 每一次移动完过后必须大盘子在下,小盘子在上
解决思路:
设n为盘子数,A,B,C为每一根柱子
1.当n=1时:直接把A上的一个盘子移动到C上, A->C
2.当n=2时:
①.把小盘子从A搬到B上, A->B
②.把大盘子从A搬到C上, A->C
③.把小盘子从B搬到C上, B->C
3.当n=n时:
①.把A上的n-1个盘子搬到B上,调用递归
②.把A上剩下的一个最大的盘子搬到C上,A->C
③.把B上的n-1个盘子搬到A上,调用递归
代码如下:
def move(n,a,b,c):
'''
n: 表示几个盘子
a: 表示第一个柱子
b: 表示第二个柱子
c: 表示第三个柱子
'''
if n == 1:
print(a, '-->', c)
return None
else:
move(n-1,a,c,b)
print(a, '-->', c)
move(n-1,b,a,c)
move(4,'A','B','C')
代码执行结果如下:
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C