關於遞迴與遞推

2022-08-10 14:24:17 字數 1520 閱讀 1937

又在洛谷上刷題。

又是一題,

來,咱讀題:

我們要求找出具有下列性質數的個數(包含輸入的自然數nn):

先輸入乙個自然數nn(n \le 1000n≤1000),然後對此自然數按照如下方法進行處理:

不作任何處理;

在它的左邊加上乙個自然數,但該自然數不能超過原數的一半;

加上數後,繼續按此規則進行處理,直到不能再加自然數為止.

11個自然數nn(n \le 1000n≤1000)

11個整數,表示具有該性質數的個數。

輸入 #1複製

6
輸出 #1複製

6
滿足條件的數為

6,16,26,126,36,136

看完題,「這題不很簡單嗎?乙個遞迴不就解決?」

滿懷信心地寫程式:

1 #include2

using

namespace

std;

3int s=0;4

int js(inta)5

12return

s;13}14

intmain()

15

一下f5都沒有按(我用的visual studio 2019),就滿懷信心的提交。

結局並不是我想象的那樣,而是這樣:

(開始懷疑)

自己試了一下,果然:

這好歹也是個i7-6700k……

怎麼也不知道應該怎樣改進,只好檢視了一下題解,發現題解使用的是遞推演算法。

我們以4為例子來進行說明

4後面可以跟上1,2組成14,24

14後面跟不了,24可以跟上1組成124

再加上4本身就可以得到4的種類

即 14,24,124,4

而我們只要算出1,2的種類就可以加起來得到4的種類

**因此,我們得到

1 f[1]=1

2 f[2]=2=f[1]+1

3 f[3]=2=f[1]+1

4 f[4]=4=f[1]+f[2]+1

5 f[5]=4=f[1]+f[2]+1

......** 以此類推,我們得到以下**

1 #include2

using

namespace

std;

3int fuc[1000];4

intmain()

514 fuc[i]++;//

還要加上這個數本身 15}

16 cout<

17return0;

18 }

我就發現了自己演算法的問題:

遞推演算法每算好乙個數,下乙個數就只需要加起來就行了;而遞迴演算法每個數都要重新計算,自然效率低。

遞推與遞迴

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