2013-03-05 52 views
4

我是一個初學者到Python,並想知道什麼if語句的作用是在河內函數的本塔:

def hanoi(ndisks, startPeg=1, endPeg=3): 
    if ndisks: 
     hanoi(ndisks-1, startPeg, 6-startPeg-endPeg) 
     print "Move disk %d from peg %d to peg %d" % (ndisks, startPeg, endPeg) 
     hanoi(ndisks-1, 6-startPeg-endPeg, endPeg) 

hanoi(ndisks=4) 
+1

拍攝時,我不知道如何在發佈我的問題時標記出我的空白... – 2013-03-05 02:54:20

+0

當您輸入問題或答案時,文本框上方有一個代碼格式按鈕,其中包含一些括號{}圖標,突出顯示您的代碼,然後單擊它。 – FoamyGuy 2013-03-05 02:55:32

+0

非常感謝! – 2013-03-05 02:56:43

回答

4

遞歸算法需要一個終端條件通常代表算法的最簡單情況。對於河內的塔樓來說,最簡單的情況是當零磁盤移動時,不要做任何事情。

在Python中,「虛假」的一個條件是零任何數字版本,所以在技術上,如果有人在一個負數傳遞給你的算法,它會失敗,因此這將是更好地檢查if ndisks > 0。這會在ndisks == 0時停止遞歸。

如果有磁盤的正數(n)的移動時,遞歸算法是:

  1. 移動n-1個從開始釘住 「其他」 PEG磁盤。
  2. 移動第n個磁盤從開始到結束的PEG。
  3. 移動n-1個從 「其他」 PEG磁盤端PEG。

上面描述了代碼的其餘部分,終端條件爲零磁盤。

+0

這很有道理。謝謝! – 2013-03-05 04:06:13

+0

@ScottWaldron如果Mark的答案足夠了,你應該考慮把它標爲正確。 – sgarza62 2013-06-14 02:35:08