課程
/后端開發
/Python
/初識Python
為什么最后一個move不需要print??
2019-04-12
源自:初識Python 7-5
正在回答
會提出這個問題應該是沒理解清楚原理,先來分析這個場景,三個柱子,每一步的目標都是借助第三根柱子,來達到把最底下那塊在兩根柱子間轉移的效果。一開始我們需要從a->c,所以需要把剩下的3片移到b柱上(步驟1),這時,對于a柱上的剩下3片來說,就是需要借助c柱移動到b柱上(步驟2),那么,對于再上面的兩片來說,又是借助b柱移動到c柱上(步驟3),所以一開始是ab,ac,bc(步驟3),然后ab,此時第三片到b柱上了,又要把c柱上的兩片移到b柱上,所以是ca,cb,ab(步驟2),之后也都是這個套路。
所以這個遞歸的原理就是,移4片到c,需要借助移3片到b,而移3片到b,就要借助移2片到c,以此類推
首先,算法里的abc都是不一定的,要看每一步的目標是什么
所以算法的第一步是move(n-1,a,c,b)? 意思是把a上的n-1片移到相對的b上,這樣a才能移到c上
第二部是把最后一片移到c上,所以是 a -> c??
最后一步就是把b柱上的移到c上,所以是move(n-1,b,a,c)
所以為什么最后一個move不用print,因為每一步的目的只是把底片移到目的柱上,相對而言就是中間的 a->c,而這個操作在每次遞歸中都會執行一次,構成了完整的過程
這個圖我一步步的解析,理解傳參,用參就理解了
第一個 move(n-1,a,c,b) 表示的是把上面的n-1塊圓盤從 a移動到b
然后 再把 a 移動到 c? 即 print a--->c
第二個move(n-1,b,a,c) 表示把放在b上的n-1個圓盤移動到c上,實現了整個程序
而這個 move(4, 'A', 'B', 'C') 表示的是調用這個函數,把參數給傳遞進去。
一共就一個,哪來的最后一個
qq_慕沐221811 提問者
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2019-06-06
會提出這個問題應該是沒理解清楚原理,先來分析這個場景,三個柱子,每一步的目標都是借助第三根柱子,來達到把最底下那塊在兩根柱子間轉移的效果。一開始我們需要從a->c,所以需要把剩下的3片移到b柱上(步驟1),這時,對于a柱上的剩下3片來說,就是需要借助c柱移動到b柱上(步驟2),那么,對于再上面的兩片來說,又是借助b柱移動到c柱上(步驟3),所以一開始是ab,ac,bc(步驟3),然后ab,此時第三片到b柱上了,又要把c柱上的兩片移到b柱上,所以是ca,cb,ab(步驟2),之后也都是這個套路。
所以這個遞歸的原理就是,移4片到c,需要借助移3片到b,而移3片到b,就要借助移2片到c,以此類推
首先,算法里的abc都是不一定的,要看每一步的目標是什么
所以算法的第一步是move(n-1,a,c,b)? 意思是把a上的n-1片移到相對的b上,這樣a才能移到c上
第二部是把最后一片移到c上,所以是 a -> c??
最后一步就是把b柱上的移到c上,所以是move(n-1,b,a,c)
所以為什么最后一個move不用print,因為每一步的目的只是把底片移到目的柱上,相對而言就是中間的 a->c,而這個操作在每次遞歸中都會執行一次,構成了完整的過程
2019-05-06
2019-04-13
第一個 move(n-1,a,c,b) 表示的是把上面的n-1塊圓盤從 a移動到b
然后 再把 a 移動到 c? 即 print a--->c
第二個move(n-1,b,a,c) 表示把放在b上的n-1個圓盤移動到c上,實現了整個程序
而這個 move(4, 'A', 'B', 'C') 表示的是調用這個函數,把參數給傳遞進去。
2019-04-12
一共就一個,哪來的最后一個