1. 程式人生 > >C語言,迭代與遞迴

C語言,迭代與遞迴

概念

迭代(iteration)是重複反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重複稱為一次“迭代”,而每一次迭代得到的結果會作為下一次迭代的初始值。
遞迴( recursion)是程式呼叫自身的程式設計技巧。

*迭代跟遞迴本質都是一種方法。而遞迴函式顧名思義,這個函式運用了遞迴這個方法。


個人理解

迭代:通過迴圈不斷重複一個過程,這個過程是一個或若干個舊值通過該過程獲得一個或若干個新值的過程,而得到的新值又充當下一個相同過程的舊值,直到迴圈得到自己期望的結果。迴圈執行一次過程就是一次迭代。**迭代不是迴圈,迭代需要用到迴圈。
它的特點是,一個過程結束後再次進行該過程。


它的思路是,從前往後推理。

打個比方,資料夾A裡有一個資料夾B,資料夾B中有一個資料夾C,資料夾C中有一個資料夾D。想要得到資料夾D,我們的方法是開啟資料夾A得到資料夾B,開啟資料夾B得到資料夾C,開啟資料夾C得到資料夾D。

//過程是 資料夾 = 資料夾 + 開啟資料夾

資料夾B = 資料夾A + 開啟資料夾
資料夾C = 資料夾B + 開啟資料夾
資料夾D = 資料夾C+ 開啟資料夾

所謂從前往後推理,就是通過A找到B,通過B找到C,通過C找到D。

等號右面的資料夾指的是需要開啟的資料夾(舊值),等號左面的資料夾指的是通過開啟舊資料夾操作得到的資料夾(新值)。開啟舊資料夾得到新資料夾就是一次迭代過程。


個人理解

遞迴:執行一個過程中需要再次呼叫該過程。
它的特點是,一個過程運算中再次用到該過程。*
他的思路是,從後往前推理。

還是以上一個比方為例。

//過程是 資料夾 = 資料夾 + 開啟資料夾

資料夾D = (資料夾C = (資料夾B = 資料夾A + 開啟資料夾) + 開啟資料夾) + 開啟資料夾

所謂從後往前推理,想要找到D就要找到C,而想要找到C就要找到B,而想要找到B就要找到A。


迭代與遞迴
1.遞迴中一定有迭代,迭代中不一定有遞迴。(記住,感興趣可取找一些遞迴,迭代試一下)
2.能用迭代就別用遞迴。遞迴容易造成溢位​。
為什麼?
還是以上個比方為例,迭代執行到最後一步就只需計算

資料夾D = 資料夾C+ 開啟資料夾

而遞迴執行到最後一步

資料夾D = (資料夾C = (資料夾B = 資料夾A + 開啟資料夾) + 開啟資料夾) + 開啟資料夾

迭代和遞迴的次數越多,我們會發現迭代依然只需要一個簡單的式子,而遞迴式子會越來越長。
在紙上寫下這兩個式子,是不是發現遞迴式子佔用的地方大?在計算機中記憶體也是同樣的道理。

溢位,這裡簡單來說就是,記憶體就這麼大小,遞迴次數越多,式子越長,佔用的記憶體越多。當式子長到記憶體放不下了,就溢位了。

為什麼還要用遞迴:採用遞迴編寫程式能使程式變得簡潔和清晰。現代程式要求高可讀性與低資源佔用,遞迴完全違反了這兩點,所以一般運用在不太佔用資源且很普遍運用的地方。

※借鑑網上資料與自己總結,如有錯誤或建議,望提出,我會加以修改或補充,感謝。