汉诺塔递归-Python

今天继续学习递归 终于 终于把 去年学c语言没看懂也没去研究的汉诺塔解决了 感谢网上众多的老铁们的资料相助 和 宿舍学长的帮助,好了以下说理解后的思路:


     (1  n == 1

             第1次  1号盘  A---->C       sum = 1 次

       (2)  n == 2

             第1次  1号盘  A---->B

             第2次  2号盘  A---->C

             第3次  1号盘  B---->C        sum = 3 次

  (3)n == 3

        第1次  1号盘  A---->C

        第2次  2号盘  A---->B

        第3次  1号盘  C---->B

        第4次  3号盘  A---->C

        第5次  1号盘  B---->A

        第6次  2号盘  B---->C

        第7次  1号盘  A---->C        sum = 7 次


由以上可以看出从A-C(黑体)以上的是实现从A->B;以下的是实现从B->C;

所以呢 假设总的是 A B C 三个柱子,(A=初始  B=过度 C=目标)

我们首先要实现 n-1个盘子的  A->B;(A=初始 C=过度 B=目标)

                之后把第n个盘子从 A->C;

    之后实现之前n-1个盘子的   B->C;    (B=初始 A=过度 C=目标)

并且把每个n-1 n-2 n-3 n-4......都当作n来进行 每一个都会递归道n=1的时候,这样我们的递归就出来了

以下是代码:

global step
step=0
def move(n,x,y,z):
    global step
    if n==1:
        print("%s->%s"%(x,z))

    else:
        move(n-1,x,z,y)
        print("%s->%s"%(x,z))
        move(n-1,y,x,z)
    step+=1

if __name__=="__main__":
    num = int(input())
    a='A'
    b='B'
    c='C'
    move(num,a,b,c)
    print(step)



猜你喜欢

转载自blog.csdn.net/qq_40879809/article/details/79682719