用python写出一个汉诺塔递归函数
def move(n, a, b, c):
if(n == 1):
print(a,"->",c)
return
move(n-1, a, c, b)
move(1, a, b, c)
move(n-1, b, a, c)
move(3, "A", "B", "C")
a,b,c是三根柱子,n为套在a柱上的圆圈个数,以n=3为例讲解递归函数执行过程
move(3, "A", "B", "C")
//n=3:开始从A上移动n-1即2个盘子通过C移动到B,以腾出C供A最后一个盘子移动
move(2, "A","C","B")
//n=2:开始进行n=2的一个递归,把当前a('A')柱上的n-1个盘子通过c('B')移动到b('C')
move(1, "A", "B", "C")
//n=1: n=2的第一个递归完成,打印结果,执行当前子函数剩余代码
print("A", "->", "C")
move(1, "A", "C", "B")
print("A", "->", "B")
move(1, "C", "A", "B")
print("C", "->", "B")
//到这里完成了a柱上面的n-1即是2个盘子的移动
//开始把a柱上最后一个盘子移动到c柱上
move(1, "A", "B", "C")
print("A", "->", "C")
//到这里完成移动a柱上的最后一个盘子到c柱上
move(2, "B", "A", "C")
//n=2:开始进行n=2的第二个递归,即把当前b('B')的盘子(n-1个)通过a('A')移动到c('C')上
move(1, "B", "C", "A")
//n=2 的第二个递归完成,打印结果并执行当前子函数的剩余代码
print("B", "->", "A")
move(1, "B", "A", "C")
print("B", "->", "C")
move(1, "A", "B", "C")
print("A", "->", "C")
//到这里把b上的盘子通过a移动到c,
//整个代码执行完毕,汉诺塔移动完成