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

2021-07-30 01:21:39 字數 1419 閱讀 3070

遞推演算法:

遞推演算法是一種簡單的演算法,即通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。遞推演算法分為順推和逆推兩種。

順推法:

顧名思義,順推法是指「從已知條件出發,逐步推算出要解決的問題」的方法。

這次就先介紹順推法中的乙個典型的例子,斐波那契數列。

題目:一般而言,兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼一年以後可以繁殖多少對兔子?

分析:我們不妨拿新出生的一對小兔子a分析一下:

乙個月後小兔子a沒有繁殖能力,所以還是一對(a);

兩個月後,a生下一對小兔b,對數共有兩對(a,b);

三個月以後,a又生下一對c,因為小兔子(b)還沒有繁殖能力,所以一共是三對(a,b,c);

------

依次類推可以列出下表:

(幼仔對數指1個月大的兔子,成兔對數指2個月大的兔子)

幼仔對數 = 前月成兔對數

成兔對數 = 前月成兔對數 + 前月幼仔對數

總體對數 = 本月成兔對數 + 本月幼仔對數

可以看出幼仔對數、成兔對數、總體對數都構成了乙個數列。即:

幼仔對數:

前面相鄰兩項相加,得到後一項。

成兔對數:

前面相鄰兩項相加,得到後一項。

總體對數:

前面相鄰兩項相加,得到後一項。

這三個數列具有相同的通項公式:

a(n+2) = an + a(n+1)。

題目所求為一年後可以繁殖多少對兔子,即求總體對數。下面給出具體**:

#include "stdafx.h"

#include using namespace std;

#define num 13 //這裡num為巨集定義值13,代表rabbitcount陣列長度為13

int _tmain(int argc, _tchar* argv)

; //下標為0-12rabbitcount[0]為初始狀態兔子總數量

rabbitcount[0] = 1; //rabbitcount[0]為初始狀態兔子總數量,值為1

rabbitcount[1] = 1; //rabbitcount[1]為乙個月後兔子總數量,值為1

for(int i = 2; i < num; i++)

for (int i = 0; i < num; i++)

int _tmain(int argc, _tchar* argv)

else

}system("pause");

return 0;

}

新手初學,有不足之處歡迎大神指點!

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

遞推演算法是一種比較簡單的演算法,即通過已知條件,利用特定關係得到中間結論,然後得到最後結果的演算法。遞推演算法分為順推和逆推兩種,本章通過幾個典型的例子來說明遞推演算法的應用。順推法順推法是指從已知條件出發,逐步推算出要解決問題的方法。例子,斐波那契數列 進製轉換等問題都可以利用順推法解決。斐波那...

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

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

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

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