迭代與遞迴的區別

2021-08-27 03:34:19 字數 942 閱讀 1101

迭代和遞迴的區別:

從「程式設計之美」的角度看,可以借用一句非常經典的話:「迭代是人,遞迴是神!」來從巨集觀上對二者進行把握。

遞迴實際上不斷地深層呼叫函式,直到函式有返回才會逐層的返回,遞迴是用棧機制實現的,每深入一層,都要占去一塊棧資料區域,因此,遞迴涉及到執行時的堆疊開銷(引數必須壓入堆疊儲存,直到該層函式呼叫返回為止),所以有可能導致堆疊溢位的錯誤;但是遞迴程式設計所體現的思想正是人們追求簡潔、將問題交給計算機,以及將大問題分解為相同小問題從而解決大問題的動機。

例如:if else 呼叫自己,並在合適時機退出

迭代大部分時候需要人為的對問題進行剖析,分析問題的規律所在,將問題轉變為一次次的迭代來逼近答案。迭代不像遞迴那樣對堆疊有一定的要求,另外一旦問題剖析完畢,就可以很容易的通過迴圈加以實現。迭代的效率高,但卻不太容易理解,當遇到資料結構的設計時,比如圖表、二叉樹、網格等問題時,使用就比較困難,而是用遞迴就能省掉人工思考解法的過程,只需要不斷的將問題分解直到返回就可以了。

例如:for,while迴圈

總結如下:定義

優點缺點

遞迴重複呼叫函式自身實現迴圈

a.用有限的迴圈語句實現無限集合;

b.**易讀;

c.大問題轉化成小問題,減少了**量。

a.遞迴不斷呼叫函式,浪費空間

b.容易造成堆疊溢位

迭代利用變數的原值推出新值;

函式內某段**實現迴圈。

a.效率高,執行時間只隨迴圈的增加而增加;

b.無額外開銷。

a.**難理解;

b.**不如遞迴**簡潔;

c.編寫複雜問題時,**邏輯不易想出

兩者關係

a.遞迴中一定有迭代,但是迭代中不一定有遞迴;大部分可以相互轉換。

b.相對來說,能用迭代不用遞迴(因為遞迴不斷呼叫函式,浪費空間,容易造成堆疊溢位)

迭代與遞迴的區別

迭代的特點 迭代是重複過程的活動,每一次對過程的重複稱為一次 迭代 每一次迭代得到的結果會作為下一次迭代的初始值。遞迴的特點 在方法運算的內部呼叫方法本身 使用遞迴的注意事項 遞迴的次數要盡可能的少,因為通過斷點執行可以看出每次遞迴都會在記憶體中建立乙個新的遞迴方法,次數過多會導致記憶體溢位 最簡單...

迴圈(迭代)與遞迴的區別

迴圈 迭代 與遞迴的區別 1。遞迴演算法與迭代演算法的設計思路區別在於 函式或演算法是否具備收斂性,當且僅當乙個演算法存在預期的收斂效果時,採用遞迴演算法才是可行的,否則,就不能使用遞迴演算法。當然,從理論上說,所有的遞迴函式都可以轉換為迭代函式,反之亦然,然而代價通常都是比較高的。但從演算法結構來...

迴圈(迭代)與遞迴的區別

1.遞迴演算法與迭代演算法的設計思路區別在於 函式或演算法是否具備收斂性,當且僅當乙個演算法存在預期的收斂效果時,採用遞迴演算法才是可行的,否則,就不能使用遞迴演算法。當然,從理論上說,所有的遞迴函式都可以轉換為迭代函式,反之亦然,然而代價通常都是比較高的。但從演算法結構來說,遞迴宣告的結構並不總能...