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