資料結構與演算法

以遞迴將求費氏數的函數 fib(n) 定義為「若 n 在1以下則回傳 n,否則回傳 fib(n−1) + fib(n−2)」。呼叫 fib(5) 時,含第一次呼叫在內,fib 被呼叫幾次?

  1. A6次
  2. B9次
  3. C15次
查看答案與解析

正確答案:C. 15次

設 fib(n) 的呼叫次數為 C(n),則 C(0) = C(1) = 1、C(n) = 1 + C(n−1) + C(n−2),因此 C(2) = 3、C(3) = 5、C(4) = 9、C(5) = 15。由於相同的值被反覆重新計算,次數會隨 n 呈指數增加,fib(30) 約需269萬次。若使用把算過的值記在表中的記憶化(動態規劃),只需計算 fib(0)~fib(5) 這6種,呼叫也減為9次(2n − 1)。6次是不同引數的個數,9次是記憶化時的呼叫次數。

  • A. 這是不同引數 fib(0)~fib(5) 的個數,沒有計入相同值的重新計算。
  • B. 這是記憶化後,已算過的值直接從表中回傳時的呼叫次數。
  • C. 正確。由 C(n) = 1 + C(n−1) + C(n−2),可得 C(5) = 15。
練習這個領域 前往領域頁面

相關計算工具

資料結構與演算法的其他題目

  1. 以1圓、4圓、6圓3種硬幣支付8圓。以從大硬幣開始盡量使用的貪婪演算法決定時的枚數,與最少枚數的關係,下列何者正確?
  2. 從(重量, 價值)為 (2, 3)、(3, 4)、(4, 5)、(5, 6) 的4件物品中選擇,放入容量為8的背包。每件物品只有1個,且不能分割。在重量合計8以下的條件下,價值合計的最大值為多少?
  3. 關於在字串中尋找樣式的 BM 法(Boyer-Moore 演算法)的特徵,下列何者正確?
  4. 某個可變長度陣列在容量已滿時加入元素,會重新配置2倍容量的區域並複製所有元素。對容量為1的空陣列逐一加入1,000個元素時,被複製的元素總數為多少?
  5. 在元素很多、負載因子維持在0.5左右的雜湊表中,使用線性探測的開放定址法往往比鏈結法(以鏈結串列串接的方法)快,最適當的原因為下列何者?