課程
/后端開發
/Python
/初識Python
A --> C
A --> B
C --> B
B --> A
B --> C
2018-09-17
源自:初識Python 7-5
正在回答
首先明確盤子只能從小到大堆放并且只能一個一個的挪動,也就是說每次只能挪動頂部的盤子也就是最小的那個,而現在要將A上的n個盤子移到C上怎么辦呢?我們可以用數字1,2,3類比一下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A? ? ? ? ? ? ? ? ? ? ? ? ? ? ?B? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C? ? ? ? ? ? ? ? ? ? ? ? ? ?
? 初始? ? ? ? ? ? ?1? 2? 3??
A --> C? ? ? ? ? ?2? ?3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1
A --> B? ? ? ? ? ?3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2
C --> B? ? ? ? ? ?3? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ?2
A --> C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ?2? ? ? ? ? ? ? ? ? ? ? ? ?3
B --> A? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3
B --> C? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2? ? 3
A --> C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? 2? ? ? 3
這樣看起來是不是很復雜呢?其實用遞歸就很好理解,首先
?move(n-1,?a,?c,?b) ?print?a,?'-->',?c???這兩句可以看作把A中的n-1個遞歸到B中,然后A中的最大數必定最后遞歸到C中,因此我們把它
手動打印出來??
move(n-1,?b,?a,?c)??最后?我們把B中剩下的n-1個遞歸到C中完成要求
拿三個木塊試一下就知道了,一個原則,只能小的在大的上面
你這個步驟表示的是有三個圓盤的情況。姑且稱之為大中小。顯示的過程是,A柱目前的狀況時從上到下為小中大。從A柱上把小盤子移動到C柱,再從A柱上把中盤子移動到B柱。然后將C柱上的小盤子移動到B柱的中盤子上去。之后講A柱上剩下的大盤子移動到C柱上。現在的狀況是大盤子在C柱,B柱上由上到下是小盤子,中盤子。然后將B柱上的小盤子移動到A柱上去,將B柱上的中盤子移動到C柱的大盤子上。最后將A柱的小盤子移動到C柱,就完成了。C柱的狀況也是從上至下為小中大
#-*- coding:utf-8 -*-
# move(n, a, b, c)表示的是有n個盤子在a柱子上,將要移到b柱子上面去
def move(n, a, b, c):
# 如果a柱子上面只有一個盤子,則直接移到c柱子上面去并輸出路徑,結束遞歸
? ? if n == 1:??
? ? ? ? print a, '-->', c
? ? ? ? return
# 表示的是將n-1的盤子從a柱子上面移到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')
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-11-15
首先明確盤子只能從小到大堆放并且只能一個一個的挪動,也就是說每次只能挪動頂部的盤子也就是最小的那個,而現在要將A上的n個盤子移到C上怎么辦呢?我們可以用數字1,2,3類比一下
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A? ? ? ? ? ? ? ? ? ? ? ? ? ? ?B? ? ? ? ? ? ? ? ? ? ? ? ? ? ?C? ? ? ? ? ? ? ? ? ? ? ? ? ?
? 初始? ? ? ? ? ? ?1? 2? 3??
A --> C? ? ? ? ? ?2? ?3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1
A --> B? ? ? ? ? ?3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2
C --> B? ? ? ? ? ?3? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ?2
A --> C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ?2? ? ? ? ? ? ? ? ? ? ? ? ?3
B --> A? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3
B --> C? ? ? ? ? ?1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2? ? 3
A --> C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? 2? ? ? 3
這樣看起來是不是很復雜呢?其實用遞歸就很好理解,首先
手動打印出來??
2018-09-18
拿三個木塊試一下就知道了,一個原則,只能小的在大的上面
2018-09-18
你這個步驟表示的是有三個圓盤的情況。姑且稱之為大中小。顯示的過程是,A柱目前的狀況時從上到下為小中大。從A柱上把小盤子移動到C柱,再從A柱上把中盤子移動到B柱。然后將C柱上的小盤子移動到B柱的中盤子上去。之后講A柱上剩下的大盤子移動到C柱上。現在的狀況是大盤子在C柱,B柱上由上到下是小盤子,中盤子。然后將B柱上的小盤子移動到A柱上去,將B柱上的中盤子移動到C柱的大盤子上。最后將A柱的小盤子移動到C柱,就完成了。C柱的狀況也是從上至下為小中大
2018-09-17
#-*- coding:utf-8 -*-
# move(n, a, b, c)表示的是有n個盤子在a柱子上,將要移到b柱子上面去
def move(n, a, b, c):
# 如果a柱子上面只有一個盤子,則直接移到c柱子上面去并輸出路徑,結束遞歸
? ? if n == 1:??
? ? ? ? print a, '-->', c
? ? ? ? return
# 表示的是將n-1的盤子從a柱子上面移到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')