課程
/后端開發
/Python
/初識Python
哈哈哈哈哈哈哈哈哈 move這是個函數嗎? 怎么 一會兒n=4 ,一會兒n=3
2018-12-15
源自:初識Python 7-5
正在回答
是按題目給出來的邏輯走的:
def?move(n,?a,?b,?c): ????if?n?==?1:? ???????????#如果a只有一個圓盤,可以直接移動到c; ???????????print?a,?'-->',?c ???????????return ??????????? ????#如果a有N個圓盤,執行三步走策略:???? ????#???首先需要把?(N-1)?個圓盤移動到?b,???? ????move(n-1,?a,?c,?b)???? ????#???然后,將?a的最后一個圓盤移動到c,???? ????print?a,?'-->',?c???? ????#???再將b的(N-1)個圓盤移動到c。???? ????move(n-1,?b,?a,?c)???? move(4,?'A',?'B',?'C')
n=1的時候就不用解釋了吧。主要是以下三步:
move(n-1,a,c,b)print a, '-->', cmove(n-1,b,a,c)
1、當n>1時,需要把“a”柱除最底端圓盤的所有(n-1個)移動到“b”柱,move(n-1,a,c,b)
2、然后把“a”柱剩下的最底端圓盤(即最大圓盤)移動到“c”柱,print a, '-->', c
3、最后把第一步移動到“b”柱的所有圓盤移動到“c”柱,move(n-1,b,a,c)
邏輯就是把n-1個圓盤先移動到過渡位置,最大的移動到目標位置后,再把過渡位置的n-1個圓盤移動到目標位置。剩下的任務就是程序自動遞歸循環。
move為什么最后是
move(
4
,?
'A'
'B'
'C'
)
我知道move(a,c,b)是把b,c交換,如果n不為1就繼續交換,直到n為1,打印第一次是從A>C還是A>B
然后move(b,a,c)也是同理,為什么要交換就是因為大盤子不能放在小盤子上面
至于為什么要這樣交換我是根據題目給的提示蒙的
n為3結果:
A-->C????A-->B????C-->B????A-->C????B-->A????B-->C????A-->C
波羅僧
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-12-15
是按題目給出來的邏輯走的:
2018-12-20
n=1的時候就不用解釋了吧。主要是以下三步:
move(n-1,a,c,b)
print a, '-->', c
move(n-1,b,a,c)
1、當n>1時,需要把“a”柱除最底端圓盤的所有(n-1個)移動到“b”柱,move(n-1,a,c,b)
2、然后把“a”柱剩下的最底端圓盤(即最大圓盤)移動到“c”柱,print a, '-->', c
3、最后把第一步移動到“b”柱的所有圓盤移動到“c”柱,move(n-1,b,a,c)
邏輯就是把n-1個圓盤先移動到過渡位置,最大的移動到目標位置后,再把過渡位置的n-1個圓盤移動到目標位置。剩下的任務就是程序自動遞歸循環。
2018-12-17
move為什么最后是
move(
4
,?
'A'
,?
'B'
,?
'C'
)
4
2018-12-15
我知道move(a,c,b)是把b,c交換,如果n不為1就繼續交換,直到n為1,打印第一次是從A>C還是A>B
然后move(b,a,c)也是同理,為什么要交換就是因為大盤子不能放在小盤子上面
至于為什么要這樣交換我是根據題目給的提示蒙的
n為3結果:
A-->C????A-->B????C-->B????A-->C????B-->A????B-->C????A-->C