演算法反芻 遞迴與遞推

2021-10-06 15:40:09 字數 2206 閱讀 4406

對於遞迴和遞推的非常專業的定義和解釋在這裡就不再copy了,私以為演算法的關鍵是運用和實踐,就好比圍棋,規則簡單但是入門的門檻很高,就算熟練記憶規則也沒法下好一盤棋。likewise,對於演算法學習,最關鍵是有乙個演算法的慣性在腦子裡,這要比熟記定義重要得多,因為這需要深刻的掌握。對於演算法的學習需要的是長久的訓練和揣摩。無他,唯手熟爾!

一、遞迴:自身呼叫自身的一種演算法形式。這也是我們平時所說的dfs(深度優先搜尋)。

q1、如何構建遞迴搜尋樹?

q2、當前是遞迴搜尋樹的第幾層?

q3、從哪一層開始遞迴?

q4、選還是不選?

q5、如何標記選還是不選的狀態?

q6、邊界是什麼?即退出遞迴的條件是什麼?

q7、什麼是回溯?

q8、什麼是恢復現場?為什麼要恢復現場?

q9、如何確定列舉的順序?

做題前思考清楚這些問題,可以說就是入門的第一步!

例一】

從 1~n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。

輸入格式

輸入乙個整數n。

輸出格式

每行輸出一種方案。

同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。

對於沒有選任何數的方案,輸出空行。

本題有自定義校驗器(spj),各行(不同方案)之間的順序任意。

資料範圍

1≤n≤15

輸入樣例:

3
輸出樣例:

3

22 3

11 3

1 21 2 3

此題本質:有n個數,而且是以1.2.3.4.5...n的順序排放,那麼某個位置的數字是放還是不放決定了整體的排列。

此題可以用深度優先搜尋解決,因為放還是不放這一問題可以抽象成二叉樹,深搜就是先序遍歷二叉樹。

#include#include#include#includeusing namespace std;

const int n=16;

int st[n];//0代表不選,1代表選,2代表空

int n;

void dfs(int u)

小明開了一家糖果店。

他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。

糖果不能拆包賣。

小朋友來買糖的時候,他就用這兩種包裝來組合。

當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。

你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。

大於17的任何數字都可以用4和7組合出來。

本題的要求就是在已知兩個包裝的數量時,求最大不能組合出的數字。

輸入格式

兩個正整數 n,mn,m,表示每種包裝中糖的顆數。

輸出格式

乙個正整數,表示最大不能買到的糖數。

資料範圍

2≤n,m≤10002≤n,m≤1000,

保證資料一定有解。

輸入樣例:

4 7
輸出樣例:

17
暴力搜尋打表

#include#include#include#includeusing namespace std;

bool dfs(int x,int i,int j)

int main()

cout<2、遞推:按照某種策略向後遞進,要填充後面的內容往往需要用到前面的內容。

最簡單的遞推:斐波那契數列

以下數列0 1 1 2 3 5 8 13 21 …被稱為斐波納契數列。

這個數列從第3項開始,每一項都等於前兩項之和。

輸入乙個整數n,請你輸出這個序列的前n項。

輸入格式

乙個整數n。

輸出格式

在一行中輸出斐波那契數列的前n項,數字之間用空格隔開。

資料範圍

0輸入樣例:

5

輸出樣例:

0 1 1 2 3
#include#include#include#includeusing namespace std;

int main()

for(int i=1;i<=n;i++)

{cout《未完待續

遞推與遞迴

遞推與遞迴 遞推像是多公尺諾骨牌,遞迴是大事化小。遞推的效率更高 遞推 斐波那契數列 例 母親為兒子的四年大學學費準備了一筆存款,兒子每月月底取下月生活費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...