遞迴演算法深入淺出一:遞迴理論概述和常見遞迴演算法羅列
阿新 • • 發佈:2018-12-31
前言
遞迴可以說是很多基礎程式設計師甚至有一定開發能力程式設計師包括我這個小菜的痛點和癢點!但有一句話很經典:
出來混,遲早是要還的!
你現在跳過的知識,以後還是要補上的(除非它被更新換代了)!
所以呢,我也得跟著學遞迴了^_\^
因此也將我自己的一些總結寫出來和大家分享下,有意見、建議的朋友麻煩高擡貴手留下留言,畢竟多個意見多份參考,謝謝!
什麼是遞迴
簡單的說:遞迴就是程式不斷呼叫自身,遞迴方法就是方法直接或間接呼叫自身的方法,遞迴是一個很有用的程式設計技術!
遞迴有兩大特點:
- 反覆執行的過程(呼叫自身)
- 結束反覆執行過程的條件(方法跳出點)
遞迴缺點:
耗記憶體,耗資源,不易閱讀!不易閱讀!不易閱讀!(重要的事情說三遍)
遞迴的設計
一個遞迴呼叫可以導致更多的遞迴呼叫,因為這個方法繼續把每個子問題分解成新的子問題,要終止一個遞迴方法,問題最後必須達到一個終止條件。當問題達到這個終止條件時,就將結果返回給呼叫者。然後呼叫者進行計算並將結果反悔給自己的呼叫者。這個過程持續進行,知道結果傳給原始的呼叫者位為止。
遞迴的設計通常包含兩部分:
1.遞迴的定義:將大問題轉化為小問題求解。
遞迴定義就是對問題分解,將一個問題分解為規模較小的問題並用相同的程式去解決。
2.遞迴的終止條件:跳出遞迴,返回最小問題的解。
遞迴終止條件通常就是得出最小問題的解,並返回給他的呼叫者。
使用遞迴解決問題
所有的遞迴程式都具有一下特點:
- 這些方法使用if-else或switch語句來引導不同的情況
- 一個或多個基礎情況(最簡單的情況)用來終止遞迴。
- 每次遞迴都會簡化原始問題,讓它不斷接近基礎情況,知道它變成基礎情況(最小問題)為止。
通常,要使用遞迴解決問題,就要將這個問題分解為子問題。每個子問題幾乎與原始問題一樣的,只是規模小一些。可以應用相同的方法(程式)來遞迴解決子問題。