課程
/后端開發
/Python
/初識Python
為什么答案是 A --> B A --> C B --> C 。。。 為什么第二個就A -->C了? A--> B只執行一次A就只剩最后一個圓盤了?
2018-05-10
源自:初識Python 7-5
正在回答
漢諾塔: #?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){ ????Move(3,A,C,B){ ????????Move(2,A,B,C){ ????????????Move(1,A,C,B){}????//A->B ????????????print?A->C?????????//A->C ????????????Move(1,B,A,C){}????//B->C ????????} ????????print?A->B?????????????//A->B ????????Move(2,C,A,B){ ????????????Move(1,C,B,A){}????//C->A ????????????print?C->B?????????//C->B ????????????Move(1,A,C,B){}????//A->B ????????} ????} ????print?A->C?????????????????//A->C ????Move(3,B,A,C){ ????????Move(2,B,C,A){ ????????????Move(1,B,A,C){}????//B->C ????????????print?B->A?????????//B->A ????????????Move(1,C,B,A){}????//C->A ????????} ????????print?B->C?????????????//B->C ????????Move(2,A,B,C){ ????????????Move(1,A,C,B){}????//A->B ????????????print?A->C?????????//A->C ????????????Move(1,B,A,C){}????//B->C ????????} ????} }
move(n-1,a,c,b)是以C為輔助樁,把A上的n-1個放到B上;
move(n-1,b,a,c)是以A為輔助樁,把B上的n-1個放到C上;
第二個A -->C,A剩下最后一個移動到C,所以是A->C;每次移動式借助另外一個樁,把最底下的移動到C
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-05-20
漢諾塔: #?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){ ????Move(3,A,C,B){ ????????Move(2,A,B,C){ ????????????Move(1,A,C,B){}????//A->B ????????????print?A->C?????????//A->C ????????????Move(1,B,A,C){}????//B->C ????????} ????????print?A->B?????????????//A->B ????????Move(2,C,A,B){ ????????????Move(1,C,B,A){}????//C->A ????????????print?C->B?????????//C->B ????????????Move(1,A,C,B){}????//A->B ????????} ????} ????print?A->C?????????????????//A->C ????Move(3,B,A,C){ ????????Move(2,B,C,A){ ????????????Move(1,B,A,C){}????//B->C ????????????print?B->A?????????//B->A ????????????Move(1,C,B,A){}????//C->A ????????} ????????print?B->C?????????????//B->C ????????Move(2,A,B,C){ ????????????Move(1,A,C,B){}????//A->B ????????????print?A->C?????????//A->C ????????????Move(1,B,A,C){}????//B->C ????????} ????} }2018-05-10
move(n-1,a,c,b)是以C為輔助樁,把A上的n-1個放到B上;
move(n-1,b,a,c)是以A為輔助樁,把B上的n-1個放到C上;
第二個A -->C,A剩下最后一個移動到C,所以是A->C;每次移動式借助另外一個樁,把最底下的移動到C