亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于python遞歸函數實現漢諾塔

關于python遞歸函數實現漢諾塔

RISEBY 2018-07-16 10:11:05
def move(n,a,b,c):              #1     if n==1:                    #2         print(a,'-->',c)        #3     else:                       #4         move(n-1,a,c,b)         #5         move(1,a,b,c)           #6         move(n-1,b,a,c)         #7 print(move(3,'A','B','C'))      #8 以上是我從網上看到的實現方法,有幾個地方不太明白,求解答,非常感謝~ 假如n=3,執行move的時候會運行到#5,#5執行完了以后的結果是move(2,a,c,b),然后是又跳回到#1重新執行,講n-1傳遞給n,a傳遞給a,c傳遞給b,b傳遞給c,如果我的a,b,c的值為X,Y,Z的話,那重新執行的也就是move(2,X,Z,Y),然后繼續執行到#5,又重新調用自身,這個時候是不是就變成了move(1,X,Y,Z)了?然后匹配了if的條件,輸出了X-->Z嗎?輸出了#3以后,再往下是怎么執行的,直接執行#6了嗎?好像也不對呀,#6是的n=1,那不是直接有輸出了X-->Z嗎? 有點糊涂了,小弟初學python,以前也沒編程基礎,網上看了其他資料和視頻,還找了漢諾塔游戲玩了下,最終還是沒看明白,天資愚鈍,希望各位能幫助下小弟,在此謝過! 越詳細越好。經過這幾天自己琢磨勉強看懂了一些,但是還是感覺太抽象了。請問為什么move(n-1,a,c,b)代表把n-1個盤子從a借助c移動到b啊,move是我定義函數的名字,感覺沒什么道理呀! 還有python的遞歸函數在調用自身很多層的時候,在什么情況下才認為一層的調用結束了呀,是有return返回?還是有print輸出?有print的輸出的時候是否會繼續往下執行?還是退回到上一層?真心想弄明白,我看網上很多人都是只是說,把所有盤子的移動看成三步,先把n-1借助C移動到B,再將n從A移動到C,再把n-1從B移動到C,這個道理我也能勉強想明白,但是代碼的實現就真的無法理解了呀!
查看完整描述

2 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

算法:當只有一個盤子的時候,只需要從將A塔上的一個盤子移到C塔上。
            當A塔上有兩個盤子是,先將A塔上的1號盤子(編號從上到下)移動到B塔上,再將A塔上的2號盤子移動的C塔上,最后將B塔上的小盤子移動到C塔上。
            當A塔上有3個盤子時,先將A塔上編號1至2的盤子(共2個)移動到B塔上(需借助C塔),然后將A塔上的3號最大的盤子移動到C塔,最后將B塔上的兩個盤子借助A塔移動到C塔上。
           當A塔上有n個盤子是,先將A塔上編號1至n-1的盤子(共n-1個)移動到B塔上(借助C塔),然后將A塔上最大的n號盤子移動到C塔上,最后將B塔上的n-1個盤子借助A塔移動到C塔上。
          綜上所述,除了只有一個盤子時不需要借助其他塔外,其余情況均一樣(只是事件的復雜程度不一樣)。

查看完整回答
反對 回復 2018-07-18
  • 2 回答
  • 0 關注
  • 312 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號