思路:1.当n=1时,a->c
2.当n=2时,a->b;a->c; b->c
3.当n=3时,将a上2个塔通过c移动到b上,即类似于上述n=2时的操作;
将a上仅剩的一个移动到c上,即a->c;
将b上的2个通过a移动到c上,调用递归。
……
当塔数为n时,将a上(n-1)个塔通过c移动到b上,最后一个移动到c;
重复上述,将b上已有的(n-1)塔,再次减1个,通过c移动到a上,将b上仅存的一个移动到c上;
循环重复
代码如下:
#n为n层塔,a,b,c代表三个地基
def hano(n,a,b,c):
if n==1:
print(a, '->', c)
if n==2:
print(a, '->', b)
print(a, '->', c)
print(b, '->', c)
hano(n-1, a, c, b)
print(a, '->, c)
hano(n-1, b, a ,c)
# 设值调用
a="A"
b="B"
c="C"
n=5 #n为塔的数量,可自定义测试
hano(n, a, b, c)
思考:上述代码是否可省略n==2的假设??