阿摩線上測驗 登入

申論題資訊

試卷:104年 - 104年地方四等-程式設計概要#35322
科目:程式設計
年份:104年
排序:0

申論題內容

三、定義一個函數如下:

int f(int n) { if( n==0) return 0; if( n== 1) return 1; if( n==2) return 2;
return f(n-1)+f(n-2)+f(n-3); }
請問計算 f(6)時,共呼叫 f(n)幾次?(8 分)

詳解 (共 2 筆)

詳解 提供者:我要成功
25次
詳解 提供者:hchungw

f(6)被調用時,根據函數定義,它會進一步調用f(5)f(4)f(3)。而每一個這些調用又會根據同樣的規則進一步展開。下麵是展開的詳細過程:

 

f(6)調用了:

 

f(5)

f(4)

f(3)

f(5)調用了:

 

f(4)

f(3)

f(2)

f(4)調用了:

 

f(3)

f(2)

f(1)

f(3)調用了:

 

f(2)

f(1)

f(0)

如果我們計算每一層的調用次數,我們會發現:

 

f(6)直接導致3次調用。

f(5)會導致再次調用f(4), f(3), f(2)

f(4)會導致調用f(3), f(2), f(1)

f(3)會導致調用f(2), f(1), f(0)

由於f(2), f(1), f(0)都會直接返回而不會進一步調用f(n),我們可以把它們看作是基礎情況,不會增加額外的調用。

 

這樣,遞歸調用的總次數是所有這些調用累加起來的結果。具體到f(6)的計算,我們可以看到調用的“樹”迅速增長,每一層的調用都依賴於之前的調用。通過具體展開每個調用,我們可以數出總共有25次函數調用,包括初始的f(6)調用在內。