讓我們假設我有一個循環Foo。遞歸追蹤
int Foo(int n)
{
if (n <= 1)
return 2;
else
return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
多少通話將發生如果我叫美孚(3),並會產生什麼結果......
感謝
讓我們假設我有一個循環Foo。遞歸追蹤
int Foo(int n)
{
if (n <= 1)
return 2;
else
return Foo(n-1) * Foo(n-2) * Foo (n-3);
}
多少通話將發生如果我叫美孚(3),並會產生什麼結果......
感謝
Foo(3)
電話Foo(2)
,Foo(1)
和Foo(0)
Foo(1)
和Foo(0)
立即返回。現在應用相同的邏輯Foo(2)
,它不會立即返回。
要得到的結果,得出這樣的樹:
Foo(3)
/ | \
Foo(2) Foo(1) Foo(0)
繼續繪製樹,直到你有立即返回(爲其第一if
返回true),然後使用這些結果來計算遞歸調用樹中較高的值。
您可以使用該樹來確定進行了多少次遞歸調用。
@bubdada:然後,爲了確保你明白,試用Foo(5)。記下你最終爲任何給定的輸入值調用函數的次數(即你最終調用Foo(0),Foo(1),Foo(2),Foo(3),Foo( 4)和Foo(5)?)。爲了獲得額外的信用,找出一種減少重複的方法,因爲在給定相同輸入的情況下,Foo應該返回相同的值。 – 2010-07-20 23:21:11
通行證1:美孚(3)
通行證2:美孚(2)*美孚(1)*美孚(0)
通行證3:美孚(1)*美孚(0)*美孚(-1)* 2 * 2
結果:2 * 2 * 2 * 2 * 2 = 32
美孚(3)將被調用的7倍。
你爲什麼不運行它,並找出? – 2010-07-20 23:14:59
我需要能夠手工交易,我期待在考試中看到類似的內容:D – bubdada 2010-07-20 23:18:32
7個電話:http://ideone.com/0LU9T – zengr 2010-07-20 23:30:36