感覺愚蠢,但我真的不明白這一點。階乘函數遞歸
在下面的代碼中,爲什麼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;
}
感覺愚蠢,但我真的不明白這一點。階乘函數遞歸
在下面的代碼中,爲什麼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;
}
讓我們看到這個步驟。
[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;
所以遞歸只是一次又一次地調用該方法,直到你達到某種基本情況。讓我們看看operand
等於一個會發生什麼:
if (operand < 0) return -1;
這是不小於零,以便繼續下一條款。
else if (operand > 1) return operand * [self factorial:operand - 1];
它不是> 1它等於1因此轉到下一個子句。
else return 1;
這是它必須,所以返回1
非常感謝!我知道這是一個基本問題,所以非常感謝您花時間回答。我接受了@scha的答案,僅僅因爲對我來說它更清晰。 – rapcal
謝謝,@scha!非常清楚和有幫助。 – rapcal