迭代和遞迴的區別:
從「程式設計之美」的角度看,可以借用一句非常經典的話:「迭代是人,遞迴是神!」來從巨集觀上對二者進行把握。
遞迴實際上不斷地深層呼叫函式,直到函式有返回才會逐層的返回,遞迴是用棧機制實現的,每深入一層,都要占去一塊棧資料區域,因此,遞迴涉及到執行時的堆疊開銷(引數必須壓入堆疊儲存,直到該層函式呼叫返回為止),所以有可能導致堆疊溢位的錯誤;但是遞迴程式設計所體現的思想正是人們追求簡潔、將問題交給計算機,以及將大問題分解為相同小問題從而解決大問題的動機。
例如:if else 呼叫自己,並在合適時機退出
迭代大部分時候需要人為的對問題進行剖析,分析問題的規律所在,將問題轉變為一次次的迭代來逼近答案。迭代不像遞迴那樣對堆疊有一定的要求,另外一旦問題剖析完畢,就可以很容易的通過迴圈加以實現。迭代的效率高,但卻不太容易理解,當遇到資料結構的設計時,比如圖表、二叉樹、網格等問題時,使用就比較困難,而是用遞迴就能省掉人工思考解法的過程,只需要不斷的將問題分解直到返回就可以了。
例如:for,while迴圈
總結如下:
定義優點
缺點遞迴
重複呼叫函式自身實現迴圈
a.用有限的迴圈語句實現無限集合;
b.**易讀;
c.大問題轉化成小問題,減少了**量。
a.遞迴不斷呼叫函式,浪費空間
b.容易造成堆疊溢位
迭代利用變數的原值推出新值;
函式內某段**實現迴圈。
a.效率高,執行時間只隨迴圈的增加而增加;
b.無額外開銷。
a.**難理解;
b.**不如遞迴**簡潔;
c.編寫複雜問題時,**邏輯不易想出
兩者關係
a.遞迴中一定有迭代,但是迭代中不一定有遞迴;大部分可以相互轉換。
b.相對來說,能用迭代不用遞迴(因為遞迴不斷呼叫函式,浪費空間,容易造成堆疊溢位)
遞迴和迭代區別
遞迴和迭代 遞迴的實現是通過呼叫函式本身,函式呼叫的時候,每次呼叫時要做位址儲存,引數傳遞等,這是通過乙個遞迴工作棧實現的。具體是每次呼叫函式本身時需要儲存的內容有區域性變數 形參 函式位址等,那麼,如果遞迴呼叫n次,則遞迴棧裡需要儲存n 區域性變數,n 形參,n 函式位址個記憶體空間,很可能導致空...
遞迴和迭代的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...
遞迴和迭代的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...