Python 使用递归函数实现汉诺塔

汉诺塔的原理是:

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


结束




















你可能感兴趣的:(Python)