免費開始練習
moea_joint_essay 111年 [統計資訊] 資料庫及資料探勘、程式設計

第 一 題

📖 題組:
有一費氏(Fibonacci)數學函式如下:(3 題,每題 5 分,共 15 分) F(n) = F(n – 1) + F(n – 2),n > 0 F(1) = 1、F(0) = 0
📝 此題為申論題,共 3 小題

小題 (一)

請以遞迴(Recursive)方式寫出上列函式程式碼。

思路引導 VIP

寫出基本的遞迴函式,包含終止條件 (n=0, n=1) 與遞迴呼叫 (F(n-1)+F(n-2))。

🤖
AI 詳解
AI 專屬家教
int Fibonacci(int n) {
    if (n == 0) return 0;

小題 (二)

請以非遞迴(Non- Recursive)方式寫出上列函式程式碼。

思路引導 VIP

使用迴圈(Iteration)方式計算,設定兩個變數紀錄前兩項的值,逐步相加求得下一項。

🤖
AI 詳解
AI 專屬家教
int FibonacciIterative(int n) {
    if (n == 0) return 0;

小題 (三)

為避免因為遞迴呼叫浪費函式重複計算的時間,試修改(一)中的程式碼,仍須使用遞迴的方式,使其計算時不須重複計算 F(n – 1)和 F(n – 2)函式。

思路引導 VIP

採用動態規劃的「記憶化搜尋」(Memoization),將已經計算過的值儲存在陣列中,如果陣列有值則直接返回,避免重複展開。

🤖
AI 詳解
AI 專屬家教
// 假設陣列 memo 已初始化為 -1,大小足以容納 n
int memo[100]; // 外部宣告並初始化
📝 遞迴費氏數列實作
💡 將函數定義分解為基本條件與呼叫自身的規律公式。
  • 確立終止條件防止無限遞迴(Base Case)
  • 將數學公式轉化為回傳值的遞迴呼叫
  • 確保輸入參數在呼叫後趨向終止條件
  • 注意遞迴深度與重複計算造成的效能問題
🧠 記憶技巧:終止條件放最前,公式遞迴在後邊,大拆小,小化無。
⚠️ 常見陷阱:漏寫 n=0 或 n=1 的判斷導致無窮迴圈,或誤將遞迴寫成迭代邏輯。
動態規劃 (Dynamic Programming) 時間複雜度 (Big O) 堆疊溢位 (Stack Overflow)

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

資料結構與演算法之程式設計實作
查看更多「[統計資訊] 資料庫及資料探勘、程式設計」的主題分類考古題