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

為了賬號安全,請及時綁定郵箱和手機立即綁定

有沒有大神解釋一下每一步是怎么出來的

A --> C

A --> B

C --> B

A --> C

B --> A

B --> C

A --> C


正在回答

4 回答

首先明確盤子只能從小到大堆放并且只能一個一個的挪動,也就是說每次只能挪動頂部的盤子也就是最小的那個,而現在要將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中完成要求


1 回復 有任何疑惑可以回復我~

拿三個木塊試一下就知道了,一個原則,只能小的在大的上面

0 回復 有任何疑惑可以回復我~

你這個步驟表示的是有三個圓盤的情況。姑且稱之為大中小。顯示的過程是,A柱目前的狀況時從上到下為小中大。從A柱上把小盤子移動到C柱,再從A柱上把中盤子移動到B柱。然后將C柱上的小盤子移動到B柱的中盤子上去。之后講A柱上剩下的大盤子移動到C柱上。現在的狀況是大盤子在C柱,B柱上由上到下是小盤子,中盤子。然后將B柱上的小盤子移動到A柱上去,將B柱上的中盤子移動到C柱的大盤子上。最后將A柱的小盤子移動到C柱,就完成了。C柱的狀況也是從上至下為小中大


1 回復 有任何疑惑可以回復我~

#-*- 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')


7 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758391    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

有沒有大神解釋一下每一步是怎么出來的

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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