2014-02-12 190 views
-1

感覺愚蠢,但我真的不明白這一點。階乘函數遞歸

在下面的代碼中,爲什麼else if語句中的遞歸在達到1時停止?它不應該最終返回-1並繼續返回到無窮?

- (int)factorial:(int)operand 
{ 
    if  (operand < 0) return -1; 
    else if (operand > 1) return operand * [self factorial:operand - 1]; 
    else     return 1; 
} 

回答

1

讓我們看到這個步驟。

[self factorial:3] 

return 3 * [self factorial:2]; 

return 3 * (2 * [self factorial:1]); 

return 3 * (2 * (1 * [self factorial:0])); 

return 3 * (2 * (1 * (1))) // Reached to return 1; 
+0

謝謝,@scha!非常清楚和有幫助。 – rapcal

1

所以遞歸只是一次又一次地調用該方法,直到你達到某種基本情況。讓我們看看operand等於一個會發生什麼:

if  (operand < 0) return -1; 

這是不小於零,以便繼續下一條款。

else if (operand > 1) return operand * [self factorial:operand - 1]; 

它不是> 1它等於1因此轉到下一個子句。

else     return 1; 

這是它必須,所以返回1

+0

非常感謝!我知道這是一個基本問題,所以非常感謝您花時間回答。我接受了@scha的答案,僅僅因爲對我來說它更清晰。 – rapcal