今天在學習遞迴和動態規劃時有點迷糊了,兩者無法區別,在網上差了下,總接如下:
首先要清楚,遞推就是迭代。
1.遞迴其實就是利用系統堆疊,實現函式自身呼叫,或者是相互呼叫的過程.在通往邊界的過程中,都會把單步位址儲存下來,知道等出邊界,再按照先進後出的進行運算,這正如我們裝木桶一樣,每一次都只能把東西方在最上面,而取得時候,先放進取的反而最後取出.遞迴的資料傳送也類似.但是遞迴不能無限的進行下去,必須在一定條件下停止自身呼叫,因此它的邊界值應是明確的.就向我們裝木桶一樣,我們不能總是無限制的往裡裝,必須在一定的時候把東取出來.比較簡單的遞迴過程是階乘函式,你可以去看一下.但是遞迴的運算方法,往往決定了它的效率很低,因為資料要不斷的進棧出棧.這時遞推便表現出它的作用了,所謂遞推,就是免除了資料進出棧的過程.也就是說,不需要函式不斷的向邊界值靠攏,而直接從邊界出發,直到求出函式值.比如,階乘函式中,遞迴的資料流動過程如下:
f(3)–>f(2)–>f(1)–>f(0)–>f(1)–>f(2)–f(3)
而遞推如下:
f(0)–>f(1)–>f(2)–>f(3)
由此可見,遞推的效率要高一些,在可能的情況下應盡量使用遞推.但是遞迴作為比較基礎的演算法,它的作用不能忽視.所以,在把握這兩種演算法的時候應該特別注意.
2.遞迴是自頂向下逐步拓展需求,最後自下向頂運算。即由f(n)拓展到f(1),再由f(1)逐步算回f(n)
迭代是直接自下向頂運算,由f(1)算到f(n)。
遞迴,遞推,迭代的區別
include include using namespace std 遞迴 1 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己。2 使用遞迴要注意的有兩點 1 遞迴就是在過程或函式裡面呼叫自身 2 在使用遞迴時,必須有乙個明確的遞迴結束條件,稱為遞迴出口.3 遞迴分為兩個階段 1 遞推 把...
遞推與遞迴
遞推與遞迴 遞推像是多公尺諾骨牌,遞迴是大事化小。遞推的效率更高 遞推 斐波那契數列 例 母親為兒子的四年大學學費準備了一筆存款,兒子每月月底取下月生活費1000元。銀行年利率為 1.71 畢業時連本帶息要取出 1000 元。則要存入多少錢。include define rate 0.0171 in...
遞推與遞迴
遞迴 將問題規模為n的問題,降解成若干個規模為n 1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模為n的問題的解。遞推 構造低階的規模 如規模為i,一般i 0 的問題,並求出解,推導出問題規模為i 1的問題以及解,依次推到規模為n的問題。遞迴包括回溯和遞推兩個過程...