递归之汉诺塔!

规则:有三个地基a,b,c,1.每次只能移动一层塔;2.任何一次移动,三个塔的状态为小塔在上,大塔在下。

思路: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的假设??




你可能感兴趣的:(python,汉诺塔,递归)