資料結構 遞迴 迭代

2021-10-19 09:58:20 字數 948 閱讀 5638

void

sum(

int n)

上述**,實現從1累加到了n,每一次的和都是在上一次的和的基礎上加上i,因此,我們不難理解,所謂迭代本質就是一種不斷用變數的舊值遞推新值的過程

迭代步驟:

1、確定迭代變數:確定乙個直接或間接地不斷由舊值推斷新值的變數,例如上面**中的變數 sum;

2、建立迭代關係式:從變數的舊值推斷到新值的公式,例如上面**中的 sum = sum +i;

3、對迭代過程進行控制:迭代不能無限迴圈下去,因此需要對何時退出迭代進行控制,例如上面**中 for 迴圈中當 i>n 時則退出迭代過程。

void sum (

int n )

這段**實質上是每次在函式體中呼叫函式自身。遞迴就是在函式內部或子過程的內部,直接或者間接地呼叫函式本身,從而使問題轉化為較小規模的同類問題的子問題。

遞迴兩大要素:

1、遞迴終止的條件;

2、遞迴公式;

可以結合上述例子去具體理解這兩大要素。

//迭代演算法

intfib

(int n )

return y;

}//遞迴演算法

intfib

(int n )

以上**是斐波那契數列,顯而易見,從**表面來看迭代沒有遞迴簡潔。但是迭代效率高,執行時間與迴圈次數成正比。

遞迴的缺點:

遞迴**簡潔清晰,可讀性強,但是遞迴存在乙個缺點:遞迴太深會導致堆疊溢位。每一次呼叫自身函式時,函式本身都沒有退出,而是繼續執行。在函式呼叫過程中,系統會分配乙個堆疊,遞迴深度越深,堆疊的占用就越大,最終會導致堆疊溢位。

資料 結構 遞迴

遞迴不一定非要像斐波拉契數列一樣在return中呼叫函式 遞迴的結束條件就是初始條件值 通常的方法將遞迴呼叫放在if語句中 n!通過遞迴實現 常用方法還是通過while實現 def jiecheng n if n 0 return 1 else sum n jiecheng n 1 右邊只有階乘表示...

資料結構 遞迴

所謂遞迴,就是在乙個函式,過程,或者資料結構的內部,又直接或間接出現定義本身的應用。在以下三種情況中,常常使用遞迴。比如階乘函式,我們能夠將其分解成幾個小問題來求解,比如求5!我們可以先求4!想求4!先求3!這樣一步步使問題簡化的方法,稱之為分治法。採取分治法求解,需要滿足下面三個條件 1.能夠將乙...

資料結構 遞迴

最近開始學習王爭老師的 資料結構與演算法之美 通過總結再加上自己的思考的形式記錄這門課程,文章主要作為學習歷程的記錄。遞迴是一種非常高效 簡潔的編碼技巧,一種應用非常廣泛的演算法,比如dfs深度優先搜尋 前中後序二叉樹遍歷等都是使用遞迴。基本上所有的遞迴問題都可以用遞推公式來表示。以尋找電影排數為例...