注意:我有2張圖片需要發佈,但我沒有足夠的信譽:一個是代碼輸出,另一個是更簡單的圖形,可以更好地定義此課程定義了這個河內的塔的問題。瞭解河內塔的Python代碼時遇到的問題
感謝代表,讓我現在可以發佈圖像。我已經發布了代碼輸出的圖像,以便您更好地瞭解此課程中介紹的河內塔問題的特定形式。此外,如果這個案例與以前對河內塔問題的答案不同,我希望它能幫助那些希望回答這個具體案例的人。
正如我在其他職位中提到的,我正在學習編程主要是爲了我的愛好。大約一個月前,我決定停止學習C和Java,並開始從頭開始學習。所以我找到了一些在線課件,教導使用Python 2-7進行編程。到目前爲止,該課程做得很好,爲我提供了一個我需要的基礎。
我目前關於課程遞歸的問題,以及班上用作示例的問題之一是河內塔問題。我在理解遞歸在這個問題中的工作方面遇到了一些麻煩。我沒有理解遞歸在其他例子中如何工作,例如Fibonacci序列和迴文檢查器。
僅供參考,我下面貼的如何河內塔問題的配製在這個例子中的圖形:
因爲我不能發佈的問題是如何制定這個類的圖像,我會形容它在文本中。
- N次響鈴上磁極稱爲從和在代碼
- 目標極標記「F」開始在代碼在代碼標記爲「T」
- 備用極被標記爲「S」
解決這個問題的兩個規則是:1)一次只能移動1個環,2)不能在直徑較小的環上放置一個直徑較大的環。
工作這一點通過手,我確定以下解決方案:
- 對於n = 2個環
- 將f爲s
- 將f到t
- 移動s到Ť
以下爲n = 3個環:
- 將f到t
- 將f爲s
- 移動噸爲s
- 將f到t
- 移動s至˚F
- 移動s到Ť
- 將f到t
下面是用於解決右側問題的python代碼和左側shell中的輸出的圖形:
def Hanoi(n,f,t,s,indent = ' '):
print indent, 'Hanoi called with n = ' + str(n)
##print n
if n == 1:
print indent, 'move from ' + f + ' to ' + t
else:
Hanoi(n-1,f,s,t,indent+indent)
print indent, 'here'
Hanoi(1,f,t,s,indent+indent)
print indent, 'there'
Hanoi(n-1,s,t,f,indent+indent)
print indent, 'anywhere'
在代碼中,教授提到使用打印語句和縮進來嘗試幫助人們更好地理解遞歸如何工作是一個好主意。該策略幫助我更好地理解斐波納契和迴文的例子,但是我仍然遇到這個問題。
代碼輸出:
正如可以在輸出中看到,對於移動序列兩個n = 2和n = 3與 「通過手溶液」同意。我想我明白了代碼生成n = 2的輸出是如何產生的......但是,對於n = 3,我掙扎着。特別是對於綠色括號A中的代碼,我不明白「從t移動到s」是如何輸出的。我沒有看到代碼中的任何地方,「t」如何成爲該打印語句中的第一個輸出!同樣,對於綠色托架B的代碼,我不看「的」如何能夠在第一輸出和「F」,在印刷舉動語句中的第二輸出...
我會很感激的任何信號輸入,可以幫助我更好地理解遞歸如何解決這個問題。
檢查http://stackoverflow.com/questions/1223305/tower-of-hanoi-recursive-algorithm – Wentao
@Rahn我會檢查出這個鏈接。 – PhilosophStein