遞迴和迭代是很重要的程式設計思想,所以對於其原理還是很有必要清楚的。
迭代(iteration)在維基百科上是這樣介紹的:
迭代是重複反饋過程的活動,其目的通常是為了接近並到達所需的目標或結果。每一次對過程的重複被稱為一次「迭代」,而每一次迭代得到的結果會被用來作為下一次迭代的初始值。
上面介紹可以說是非常細緻詳盡了,這裡還是來個小例子具體說明下迭代的我對迭代的理解吧~
分析過程
目的: 接近並達到所需的目標或結果
過程:重複反饋每一次過程
文字描述:可以這麼想,我左手一袋小球(3個),右手一袋小球(5個),我想知道這兩袋裡面一共有幾個小球,可是我不會加法運算啊(我朋友們也不會),咋辦呢,把它給我朋友折騰吧,折騰完給我個結果。
於是我把它交給朋友a,朋友a把左手袋子裡的小球拿出乙個放到了右手袋子裡,告訴朋友b:我左手這袋子有兩個小球,右手這袋子裡有6個小球,又給了朋友b,朋友b照做又給了朋友c…
圖示如下: 即:
3 + 5 |
2 + 6 |
1 + 7 |
0 + 8 |
8 |
————
時間複雜度為 o(x)
空間複雜度為o(1)
遞迴(recursion)在維基百科上是這樣介紹的:
通俗點說,遞迴就是那個膾炙人口的故事:從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?「從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?『從前有座山,山里有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?……』」
典型案例:斐波那契數列
還是上面分小球的例子,遞迴就是在過程中得到的結果,還要將結果返回給自身,然後繼續傳下去…小夥伴們一起忙起來~啦啦啦~
圖示如下: 即:
3 + 5 |
1 + 2 + 5 |
1 + 1 + 1 + 5 |
1 + 1 + 1 + 0 +5 |
1 + 1 + 1 + 5 |
1 + 1 + 6 |
1 + 7 |
8 |
時間複雜度為 o(x)
空間複雜度為o(x)
若發生事物故障,迭代過程中的資料已經儲存在了程式中了,而遞迴會有一些不可見的過程在暗暗發生…(蹊蹺地那種呦~/逃
遞迴與迭代的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...
遞迴與迭代的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...
遞迴與迭代的區別
遞迴和迭代都是迴圈的一種。遞迴是重複呼叫自身函式實現迴圈 迭代是函式內某段 實現迴圈。迭代與普通迴圈的區別是 迭代迴圈中,參與運算的變數同時是儲存結果的變數,當前儲存的結果做為下一次迴圈的初始值 如 v v 1 遞迴與迭代都是基於控制結構 迭代用重複結構,而遞迴用選擇結構。遞迴與迭代都涉及重複 迭代...