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

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

參考代碼的含義

參考代碼中

“move(n-1, a, c, b)

? ? print a, '-->', c

? ? move(n-1, b, a, c)”

這一段的含義我不明白,有下面幾個問題

1,print a, '-->', c中的 “a”與“c” 在“move(n-1, a, c, b)”這行代碼中分別是后者的‘a’與‘b’嗎?

2,第一行的n-1與第三行的n-1是不是同一個數字?

3,這兩個move是如何實現循環運算的?

正在回答

1 回答

def?move(n,?a,?b,?c):
????if?n?==?1:?#如果a只有一個圓盤,可以直接移動到c;
????????print(a?,'->',?c)
????????return
????else:
????????move(n-1,a,c,b)?#首先需要把?(N-1)?個圓盤移動到?b
????????move(1,a,b,c)?#將a的最后一個圓盤移動到c
????????move(n-1,b,a,c)?#再將b的(N-1)個圓盤移動到c
????????
move(4,?'A',?'B',?'C')

這個問題之前也是困擾了我很久,仔細琢磨一下,還是可以理解的,這個例子對于理解遞歸函數是很不錯的。

首先,假設,這個函數只解決了一個問題,就是只有一個盤子的情況下,A——>C。

遞歸函數就是要不斷的調用函數自身,以達到將問題化整為零,最小段進行解決。也就是,就算有N個盤子,也要進行自身調用,將N個盤子的情況,至變成N個1個盤子的情況下,進行解決。

在整個變化中,唯一始終不變的就是n==1的情況A——>C,既然如此,對于變化就要在else中對需要變換的位置進行調換。例如?

move(n-1?,?a?,?c?,?b)?#第一個N-1的情況進行調用的時候
??????|????|???|???|???#上下對比可以看出,b出現在了固定參數c的位置
move(??n?,?a?,?b?,?c)?#調用的N=1的情況,固定參數位置

然而 N=1的情況下結果就是

print(a?,'->',?c)

由此看出,最后運行的結果就是 A——>B,如此就符合了第一個出現的N-1的情況,以此類推。

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

Icarusxuxx 提問者

感謝你的解答 不過我還有一點不明白,在這個代碼中似乎沒有體現如何實現“小盤子上方不能放大盤子”這個限制 為什么可以輸出正確的結果呢?
2018-07-03 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

參考代碼的含義

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

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

幫助反饋 APP下載

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

公眾號

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