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的位置,文章是簡單了點,但如果和我一樣按照課程順序一步步走下來相信可以理解的,要是實在不能理解就動手畫一畫,畢竟老祖宗說得好實踐出真知!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章