跳轉到內容

程式設計基礎/遞迴與迭代

來自華夏公益教科書,開放的書籍,開放的世界

介紹遞迴,並使用迴圈作為重複演算法解決方案的替代方法。包括用於計算階乘的 C++ 程式設計程式碼。

重複演算法

[編輯 | 編輯原始碼]

"一般來說,編寫重複演算法有兩種方法。一種使用迴圈;另一種使用遞迴。遞迴是一種重複過程,其中一個函式呼叫自身。兩種方法都提供重複性,並且可以互相轉換。"[1] 迭代是控制結構的類別之一。它允許零到多次處理某些操作。迭代也被稱為迴圈和重複。數學術語“迭代”是指執行迴圈語句部分。許多問題/任務需要使用重複演算法。在大多數程式語言中,這可以透過以下兩種方式實現:

  1. 迴圈控制結構,特別是 for 迴圈(迭代方法)
  2. 遞迴呼叫函式

在許多數學相關的問題中,重複演算法作為解決方案方法出現。包括階乘、斐波那契數列和漢諾塔問題。這些問題的解決方案通常只以遞迴方法的形式呈現。然而,“... 您應該瞭解遞迴的兩個主要限制。首先,遞迴解決方案可能涉及大量開銷,因為它們使用函式呼叫。其次,每次呼叫都會消耗一些記憶體分配。如果遞迴很深 - 也就是說,如果存在大量遞迴呼叫 - 那麼您可能會耗盡記憶體。階乘和斐波那契數列的解決方案都最好用迭代的方式來開發。"[2]

瞭解遞迴或迭代方法的工作原理將留給其他人。它們通常作為資料結構學習的一部分被詳細介紹。我們介紹它們的目的是

  1. 為您提供遞迴的定義
  2. 介紹迭代的替代解決方案方法

以下示例程式展示了 8! (八階乘)的兩種解決方案。

C++ 示例程式

[編輯 | 編輯原始碼]

建立原始碼檔案的資料夾或子資料夾

[編輯 | 編輯原始碼]

根據您的編譯器/IDE,您應該決定在哪裡下載和儲存原始碼檔案以進行處理。謹慎起見,您應該在下載原始碼檔案之前根據需要建立這些資料夾。Bloodshed Dev-C++ 5 編譯器/IDE 的建議子資料夾名稱為:

  • Demo_Programs

如果您還沒有這樣做,請根據需要建立資料夾和/或子資料夾。

下載示例程式

[編輯 | 編輯原始碼]

將以下檔案下載到您的儲存裝置中的相應資料夾中。按照您的編譯器/IDE 的方法,編譯並執行程式。結合其他學習資料學習原始碼檔案。

從 Connexions 下載:Demo_Factorial.cpp

遞迴
一個重複的過程,其中一個函式呼叫自身。
階乘
一個經常使用遞迴解決的數學問題。

參考資料

[編輯 | 編輯原始碼]
  1. Behrouz A. Forouzan 和 Richard F. Gilberg,Computer Science A Structured Approach using C++ 第二版 (美國:Thompson – Brooks/Cole,2004) 265。
  2. Behrouz A. Forouzan 和 Richard F. Gilberg,Computer Science A Structured Approach using C++ 第二版 (美國:Thompson – Brooks/Cole,2004) 272。
華夏公益教科書