免費開始練習
普考申論題 106年 [資訊處理] 程式設計概要

第 三 題

三、用 C 語言撰寫反覆結構(for-loop)及遞迴(recursive)2 個版本的函式,分別計算出費式數列(Fibonacci Sequence):int F(int n),其數學定義如下:
F0 = 0, F1 = 1, and Fn = Fn–1 + Fn–2 for n >1。(25 分)
例如: 呼叫 F(6) 計算出 8 and F(7) 計算出 13。
📝 此題為申論題

思路引導 VIP

看到費氏數列,應首先確立初始條件(F0=0, F1=1)與遞迴關係式(Fn=Fn-1+Fn-2)。遞迴版可直接將數學定義轉譯為程式碼;而反覆結構(for-loop)版則需利用變數滾動記錄前兩項的值,以迴圈逐步推導,避免遞迴造成的重複計算與效能低落。

🤖
AI 詳解 AI 專屬家教

【破題】 計算費氏數列的核心在於處理初始條件與狀態轉移。實作可分為直觀對應數學定義的「遞迴法」,以及具備較佳執行效能的「反覆結構(迴圈)法」。 【論述】

▼ 還有更多解析內容
📝 費氏數列演算法實作
💡 掌握遞迴與迴圈處理重疊子問題的效能與實作差異。
比較維度 遞迴版本 (Recursive) VS 反覆版本 (Iterative)
實作邏輯 由上而下呼叫自身 由下而上迴圈累加
時間複雜度 指數級 O(2^n) 線性級 O(n)
空間複雜度 需堆疊空間 O(n) 常數空間 O(1)
優缺點 代碼簡潔/重複運算 效能優異/代碼稍繁
💬遞迴寫法直觀但效能差,大型運算時必須改採反覆結構或動態規劃。
🧠 記憶技巧:遞迴直觀但低效,迴圈累加效率高。n等於01先處理,前兩項更新別弄反。
⚠️ 常見陷阱:在撰寫反覆版本時,容易在更新 prev1 與 prev2 變數時順序出錯,導致數值覆蓋。
時間與空間複雜度 (O-notation) 動態規劃 (Dynamic Programming) 堆疊溢位 (Stack Overflow)

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

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

🏷️ 相關主題

程式語言與演算法實作
查看更多「[資訊處理] 程式設計概要」的主題分類考古題