" 遞推:從已知道的若干項出發,利用遞推關係依次推算出後面的未知項的方法,我們稱為遞推演算法。"
顯而易見,遞推即是乙個將已知條件推向答案的演算法,舉個例子:「從前有座山,山里有個老和尚給小和尚講故事:『從前有座山,山里有座廟,廟裡有個老和尚給小和尚講故事……』 」。
不要管是誰講的故事,故事所發生的位置在逐步變化,正如我給你講的故事裡,一號小和尚與一號老和尚在山里,而一號老和尚口中的二號小和尚和老和尚在廟裡,就這麼慢慢的縮小範圍,我們終於知道小和尚和老和尚其實在房間裡休息。他們休息的這個準確位置便是我們要找到的答案。
說白了就是從已知到未知的過程。既然要從已知推到未知,那麼未知和已知要有乙個關係才能進行遞推,而這個關係用數學等式寫下來就叫做遞推式。
一般格式是這樣的:未知=已知+一系列運算。通過已知計算出未知,這個未知就變成了已知,再去求未知,直到求出答案。
ps:我們一般用陣列來模擬遞推的過程。
例題理解 :
我們來看到下面這一道題:鋪磚
這是一道非常經典的遞推問題。
我們用陣列a儲存當長度為n時的鋪法總數,讀完題目可以推得,
a[0]
=1,a[1]=
1,a[2]
=2。
當n>2時,我們就可以開始使用遞推了。
我們來分析一下當長度為n時的鋪最後一塊磚的情況:
①豎著放:
豎著放,佔乙個長度,所以我們就可以得到這種情況下a[n]=a[n-1]
②橫著放:
由於是橫著放,佔兩個長度,所以此時的a[n]=a[n-2]
加法原理,我們的遞推式就出來了!
a[n]
=a[n-1]
+a[n-
2]
類似的,斐波那契數列和數樓梯的遞推式皆是如此。
什麼,你還想要找我要**,說到這份上了,你要還是不會,趁早afo吧…
" 遞迴:從已知問題的結果出發,用迭代表示式逐步推算出問題的開始的條件,即順推法的逆過程,稱為遞迴。"
其實遞迴和遞推唯一的不同就是——遞迴是從未知到已知逐步接近解決問題的過程,而遞推從已知到未知。
ps : 遞迴一般用函式不斷呼叫自身來實現
例題理解:
很容易想到迴圈(廢話)。
思路部分:
讓我們想想看,如果你要求n!,你需要知道什麼?
是不是(n-1)! ?
我們的n!是不是等於(n-1)!*n ?
那這樣的話這題不就出來了嗎。
我們令f(n)表示n!的值。
那麼函式裡我們就可以直接根據剛剛的思路寫出return f(n-1)*n;
棒極了是不是?
intf(
int n)
//是不是這樣
但為啥程式卡住了呢?
因為——這個遞迴沒有出口。就像迴圈沒有條件,遞推沒有已知條件一樣,是有問題的。所以我們需要寫乙個遞迴出口:當n等於0時返回1(「0!」=1你總知道吧)。於是我們的求階乘函式就出來了:
intf(
int n)
ok啦,我們的遞迴函式就這樣寫完了!
遞推是從已知條件逐步推向未知條件。
遞迴是從未知條件逐步推到已知條件。
它們倆是可以互相轉化的。
有時遞推寫起來很複雜的一道題,用遞迴就很簡單。
有時遞迴寫起來很複雜的一道題,用遞推就很簡單。
所以什麼時候用遞迴還是遞推真的是仁者見仁智者見智了。
呼呼,終於淦完第①篇知識總結了。
遞推與遞迴
遞推與遞迴 遞推像是多公尺諾骨牌,遞迴是大事化小。遞推的效率更高 遞推 斐波那契數列 例 母親為兒子的四年大學學費準備了一筆存款,兒子每月月底取下月生活費1000元。銀行年利率為 1.71 畢業時連本帶息要取出 1000 元。則要存入多少錢。include define rate 0.0171 in...
遞推與遞迴
遞迴 將問題規模為n的問題,降解成若干個規模為n 1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模為n的問題的解。遞推 構造低階的規模 如規模為i,一般i 0 的問題,並求出解,推導出問題規模為i 1的問題以及解,依次推到規模為n的問題。遞迴包括回溯和遞推兩個過程...
遞迴與遞推
1 遞迴與遞推的定義 前者是 後者是對以前的問題進行計算,以得出當前問題的大結果。2 它們的典例和運用遞迴 遞推dfs,搜尋與回溯 動態規劃 用遞推能做的,記憶化搜尋定能夠實現 遞推僅能求方案數,求具體方案需用遞迴 3 各種關於遞推的例題 爬樓梯 數樓梯 兔子問題 includeusing name...