假設我們正在編寫一個簡單的遞歸函數fib(n)
來計算第n個斐波納契數。現在,我們希望該功能打印該第n個數字。由於同一個函數被重複調用,必須有一個條件只允許打印根呼叫。問題是:如何在不傳遞任何附加參數或使用全局/靜態變量的情況下編寫此條件。如何檢測根遞歸調用?
所以,我們正在處理的是這樣的:
int fib(int n) {
if(n <= 0) return 0;
int fn = 1;
if(n > 2) fn = fib(n-2) + fib(n-1);
if(???) cout << fn << endl;
return fn;
}
int main() {
fib(5);
return 0;
}
我認爲根本的呼叫通過返回到不同的來電者,即本例中的主要方法,從所有的孩子不同。我想知道是否有可能使用此屬性來編寫條件和方式。
更新:請注意,這是一個人爲設計的例子,僅用於介紹該想法。這應該從標籤中清楚。我不尋找標準的解決方案。謝謝。
正如許多答案中指出的那樣,創建一個啓動遞歸的包裝函數是很常見的做法。自定義之前/之後處理(如IO)可以去那裏。 – 2010-04-22 16:18:45