資料結構與演算法

函數 f(x, y) 定義為「若 y 為0則回傳 x,否則回傳 f(y, x mod y)」。呼叫 f(84, 36) 時的回傳值,以及 f 被呼叫的次數(含第一次呼叫)的組合為下列何者?

  1. A回傳值12,呼叫3次
  2. B回傳值12,呼叫4次
  3. C回傳值6,呼叫3次
查看答案與解析

正確答案:A. 回傳值12,呼叫3次

f(84, 36) 因 84 mod 36 = 12 而呼叫 f(36, 12),又因 36 mod 12 = 0 而呼叫 f(12, 0),由於 y 為0,回傳12。呼叫為 f(84, 36)、f(36, 12)、f(12, 0) 共3次,這就是以輾轉相除法(歐幾里得演算法)求最大公因數的計算。此函數直接回傳遞迴呼叫結果,屬於尾端遞迴,若編譯器進行尾端呼叫最佳化就能轉換成迴圈,即使呼叫很深也不會持續消耗堆疊。

  • A. 正確。f(84, 36)→f(36, 12)→f(12, 0) 共3次,回傳84與36的最大公因數12。
  • B. 在 f(12, 0) 時 y 為0就結束,因此沒有第4次呼叫。
  • C. 84與36的最大公因數是12(84 = 12×7、36 = 12×3)。
練習這個領域 前往領域頁面

相關計算工具

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

  1. 以遞迴將求費氏數的函數 fib(n) 定義為「若 n 在1以下則回傳 n,否則回傳 fib(n−1) + fib(n−2)」。呼叫 fib(5) 時,含第一次呼叫在內,fib 被呼叫幾次?
  2. 以1圓、4圓、6圓3種硬幣支付8圓。以從大硬幣開始盡量使用的貪婪演算法決定時的枚數,與最少枚數的關係,下列何者正確?
  3. 從(重量, 價值)為 (2, 3)、(3, 4)、(4, 5)、(5, 6) 的4件物品中選擇,放入容量為8的背包。每件物品只有1個,且不能分割。在重量合計8以下的條件下,價值合計的最大值為多少?
  4. 關於在字串中尋找樣式的 BM 法(Boyer-Moore 演算法)的特徵,下列何者正確?
  5. 某個可變長度陣列在容量已滿時加入元素,會重新配置2倍容量的區域並複製所有元素。對容量為1的空陣列逐一加入1,000個元素時,被複製的元素總數為多少?