遞推演算法1 順推法之斐波那契數列

2021-10-02 09:45:44 字數 1448 閱讀 1202

遞推演算法是一種比較簡單的演算法,即通過已知條件,利用特定關係得到中間結論,然後得到最後結果的演算法。遞推演算法分為順推和逆推兩種,本章通過幾個典型的例子來說明遞推演算法的應用。

順推法順推法是指從已知條件出發,逐步推算出要解決問題的方法。例子,斐波那契數列、進製轉換等問題都可以利用順推法解決。

斐波那契數列(遞推法)

如果1對兔子每月能生1對小兔子,而每對小兔子在它出生後第3個月,又能開始生一對小兔子,假定在不發生死亡的情況下,由1對兔子開始,1年後能繁殖成多少對兔子。

【定義】

斐波那契數列指的是這樣的乙個數列:

0,1,1,2,3,5,8,13,21,......

這個數列從第三項開始,每一項正好等於前兩項之和。如果設f(n)為該數列的前n項,那麼這句話可以寫成如下形式:

f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)  (n≥2)

顯然這是乙個線性遞推數列。

【演算法思想】

我們將兔子分為3種,大兔子、1個月大的小兔子、2個月大的小兔子、其中,大兔子值的是已經可以生小兔子的兔子,1個月大的兔子是當月出生的兔子,2個月大的兔子是上個月生的兔子。到了第3個月時,2個月大的兔子就能生小兔子了。具體的解決思想如下:

(1)初始時,只有1對出生的小兔子,因此總數為1對。

(2)第1個月時,1個月大的小兔子長成2個月的小兔子但還沒有繁殖能力,因此總數仍為1對。

(3)第2個月時,2個月大的小兔子長成大兔子,已經有繁殖能力,繁殖1對1個月大的小兔子。因此總數為2對。

(4)第3個月時,只有1對大兔子,又繁殖1對1個月大的小兔子;同時上個月繁殖的1個月大的小兔子成長為2個月大的小兔子。因此,總數為3對。

(5)依次類推,具體過程如下圖所示。

從表中不難看出,兔子的總對數分別是1,1,2,3,5,8,13,......構成乙個數列。這個數正好構成斐波那契數列:

(1)初始時,設f0=1,第0個月兔子的總數為1對。

(2)第1個月時,f1=1,第1個月兔子的總數為1對。

(3)第2個月時,兔子總數為f2=f0+f1。

(4)第3個月時,兔子總數為f3=f1+f2。

......

依次類推,第n個月兔子總數f(n)=f(n-1)+f(n-2)。

code

#include#include #define n 12

void main()

結果:

【說明】

這個數列是在中世紀由義大利數學家斐波那契在《算盤全書》中提出的,這個數列的通項公式除了用a_n = a_n-2 + a_n-1表示外,還可以用通項公式表示為:

遞推演算法(順推) 斐波那契數列用C 實現

遞推演算法 遞推演算法是一種簡單的演算法,即通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。遞推演算法分為順推和逆推兩種。順推法 顧名思義,順推法是指 從已知條件出發,逐步推算出要解決的問題 的方法。這次就先介紹順推法中的乙個典型的例子,斐波那契數列。題目 一般而言,兔子在出生兩個月後...

遞推演算法之斐波那契數列 昆蟲繁殖

問題描述 科學家在熱帶森林中發現了一種特殊的昆蟲,這種昆蟲的繁殖能力很強。每對成蟲過x個月每個月產y對卵,每對卵要過兩個月長成成蟲。假設每個成蟲不死,第乙個月只有一對成蟲,且卵長成成蟲後的第乙個月不產卵 過x個月產卵 問過z個月以後,共有成蟲多少對?0 x 20,1 y 20,x z 50 輸入格式...

斐波那契數列的遞迴 遞推演算法比較

公式 f n 1 f n f n 1 f 0 f 1 1 網上找到的乙個最簡單例子,修改了兩個bug 遞迴演算法 int f1 int n if n 2 return 1 else return f1 n 1 f1 n 2 遞推演算法 int f2 int n if n 2 return 1 int...