遞推與遞迴

2021-10-22 18:47:27 字數 2106 閱讀 4604

" 遞推:從已知道的若干項出發,利用遞推關係依次推算出後面的未知項的方法,我們稱為遞推演算法。"

顯而易見,遞推即是乙個將已知條件推向答案的演算法,舉個例子:「從前有座山,山里有個老和尚給小和尚講故事:『從前有座山,山里有座廟,廟裡有個老和尚給小和尚講故事……』 」。

不要管是誰講的故事,故事所發生的位置在逐步變化,正如我給你講的故事裡,一號小和尚與一號老和尚在山里,而一號老和尚口中的二號小和尚和老和尚在廟裡,就這麼慢慢的縮小範圍,我們終於知道小和尚和老和尚其實在房間裡休息。他們休息的這個準確位置便是我們要找到的答案。

說白了就是從已知到未知的過程。既然要從已知推到未知,那麼未知和已知要有乙個關係才能進行遞推,而這個關係用數學等式寫下來就叫做遞推式

一般格式是這樣的:未知=已知+一系列運算。通過已知計算出未知,這個未知就變成了已知,再去求未知,直到求出答案。

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...