python实现汉诺塔详解

用python解决汉诺塔问题

本来想给自己立个flag,三个月学完python,结果看完了廖雪峰老师讲解的汉诺塔问题觉得自己好像真的是个智障,我本来是个遇到困难想都不想就退缩的人,但这次我真的想试着研究一下,当然一部分原因也是为了让自己看起来没那么像智障而已,我只是把自己了解和思考的过程记录下来(因为我真的怕自己忘得一干二净),如果捎带手给您答疑解惑了也算是我顺手之劳,深感荣幸,而对于那些大神们,我就瞎写,您就瞎看:

示例答案如下:

def move(n,a,b,c):
    #a,b,c分别是三根柱子,n为套在a柱上的圆圈个数
    if n==1:
        print(a,'-->',c)
        return
    move(n-1,a,c,b)
    move(1,a,b,c)
    move(n-1,b,a,c)
>>> move(3,'A','B','C')  
#这里我用大写字母ABC表示实参是为了与形参小写的abc区别开,这步很关键

1.move(3,A,B,C)
2.move(2,A,C,B) 这里的形参a=A,b=C,c=B;下面以此类推,自己对应一下就好
…3. move(1,A,B,C) 当n=1时函数会进行打印即① A–>C
…4. move(1,A,C,B) 当n=1时函数会进行打印即② A–>B
…5. move(1,C,A,B) 当n=1时函数会进行打印即③ C–>B
6.move(1,A,B,C) 当n=1时函数会进行打印即④ A–>C
7.move(2,B,A,C)
…8. move(1,B,C,A) 当n=1时函数会进行打印即⑤ B–>A
…9.move(1,B,A,C) 当n=1时函数会进行打印即⑥ B–>C
…10.move(1,A,B,C) 当n=1时函数会进行打印即⑦ A–>C

函数执行顺序按序号1-10执行,打印顺序按序号①-⑦打印,ABC是真正传入的实参,输入实参后还需要自己对正abc的位置,文章是简单了点,但如果和我一样按照课程顺序一步步走下来相信可以理解的,要是实在不能理解就动手画一画,毕竟老祖宗说得好实践出真知!

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/JJyyyhello/article/details/79437792
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞