汉诺塔的原理是:
A B C 三个柱子 其中A柱子上面有 1-n个圆环,把圆环从A柱移动到C柱 并且顺序不变
假设A上面有 1 2 3 三个圆环,那么移动顺序是:
1---C
2---B
1---B
3---C
1---A
2---C
1---C
如果使用 Python 中的递归函数来实现的话,代码如下:
def move(n,a,b,c):
if n==1:
print(a,'-->',c)
return
move(n-1,a,c,b)
print(a,'==',c)
move(n-1,b,a,c)
代码解读:如果A柱上面只有1个圆环,那么直接从A移动到C,如果A柱上面有n个圆环,那么首先把n-1个圆环从A移动到B,代码为 move(n-1,a,c,b),然后再把 最下面的圆环从A移动到C,代码为print(a,'==',c),最后在把B上面的圆环移动到C,代码为 move(n-1,b,a,c)
假设n=3,那么整个代码的执行过程如下:
move(3,a,b,c):
n≠1
执行 move(2,a,c,b)代码
开始执行 move(2,a,c,b)函数
move(2,a,c,b):
n≠1
执行 move(1,a,b,c)代码
开始执行 move(1,a,b,c)函数
n=1
输出:a---c
然后执行 move(2,a,c,b)函数后面的代码
输出:a---b
执行 move(1,c,a,b)代码
开始执行 move(1,c,a,b)函数
n=1
输出:c---b
move(2,a,c,b)函数执行完毕,开始执行move(3,a,b,c)后面的代码
输出:a---c
执行 move(2,b,a,c)代码
开始执行 move(2,b,a,c)函数
n≠1
执行 move(1,b,c,a)代码
开始执行 move(1,b,c,a)函数
n=1
输出:b---a
执行 move(2,b,a,c)后面的代码
输出:b---c
执行 move(1,a,b,c)代码:
开始执行 move(1,a,b,c)函数
n=1
输出:a---c
结束