Python汉诺塔执行步骤详解

2025-11-01 10:45:51

1、一定要分清形参与实参

不然容易搞混

Python汉诺塔执行步骤详解

2、move(3,'a','b','c')#执行函数

def move(n,x,y,z):  传入参数为 move(3, 'a', 'b', 'c')

    if n==1: (n=3) 条件不成立,不执行

        print(x,'-->',y)

    else:

       move(n-1,x,z,y) 参数发生变化->传入参数为 move(2, 'a', 'c', 'b')

                          move(n, x, y, z)  参数发生变化->参数发生变化: n=2 x='a' y='c' z='b'

            if n==1 : (n=2) 条件不成立,不执行

                print(x,'-->',z)

            else :

                move(n-1,x,z,y) 这里传入参数为 move(1, 'a', 'b', 'c')

                            move(n, x, y, z) 参数发生变化->参数发生变化: n=1 x='a' y='b' z='c'

                            if n==1 : (n=1) 条件成立,执行

                                print(x,'-->',z)  输出 a-->c 执行完毕,回退

                向下执行

                move(1,x,y,z)  n=2 x='a' y='c' z='b'

                            move(n, x, y, z) 参数发生变化->这里传入参数为 move(1, 'a', 'c', 'b')

                            if n==1 : (n=1) 条件成立,执行

                                print(x,'-->',z)  输出 a-->b 执行完毕,回退

                            向下执行  n=2 x='a' y='c' z='b'

                move(n-1,y,x,z) 这里传入参数为 move(1, 'c', 'a', 'b')

                            move(n, x, y, z) 参数发生变化->这里传入参数为 move(1, 'c', 'a', 'b')

                            if n == 1 : n = 1 条件成立 执行完毕

                                print(x,'-->',z)  输出 c-->b  执行完毕,回退

        move(1,x,y,z) 参数为: n=1 x='a' y='b' z='c'  输出 a-->c        move(n-1,y,x,z)这里传入参数为 move(2, 'b', 'a', 'c')

            move(n, x, y, z)  参数发生变化->参数发生变化: n=2 x='b' y='a' z='c'

            if n==1 : (n=2) 条件不成立,不执行

                print(x,'-->',z)

            else :

                move(n-1,x,z,y) 参数发生变化->这里传入参数为 move(1, 'b', 'c', 'a')

                            move(n, x, y, z) 参数发生变化->这里传入参数为: n=1 x='b' y='c' z='a'

                            if n==1 : (n=1) 条件成立,执行

                                print(x,'-->',z)  输出 b-->a 执行完毕,回退

                向下执行

                move(1,x,y,z)  n=2 x='b' y='a' z='c'

                            move(n, x, y, z) 参数发生变化->这里传入参数为 move(1, 'b', 'a', 'c')

                            if n==1 : (n=1) 条件成立,执行

                                print(x,'-->',z)  输出 b-->c 执行完毕,回退

                            向下执行  n=2 x='b' y='a' z='c'

                move(n-1,y,x,z) 参数发生变化->这里传入参数为 move(1, 'a', 'b', 'c')

                            move(n, x, y, z) 参数发生变化->这里传入参数为 move(1, 'a', 'b', 'c')

                            if n == 1 : n = 1 条件成立 执行完毕

                                print(x,'-->',z)  输出 a-->c  执行完毕,回退

Python汉诺塔执行步骤详解

3、Python汉诺塔函数

def move(n,x,y,z):

    if n==1:

        print(x,'-->',z)

    else:

        move(n-1,x,z,y)#将前n-1个盘子从x移动到y上

        move(1,x,y,z)#将最底下的最后一个盘子从x移动到z上

        move(n-1,y,x,z)#将y上的n-1个盘子移动到z上

print(move(3,'a','b','c'))

Python汉诺塔执行步骤详解

4、执行结果如图所示

Python汉诺塔执行步骤详解

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢