遞推演算法:
遞推演算法是一種簡單的演算法,即通過已知條件,利用特定關係得出中間推論,直至得到結果的演算法。遞推演算法分為順推和逆推兩種。
順推法:
顧名思義,順推法是指「從已知條件出發,逐步推算出要解決的問題」的方法。
這次就先介紹順推法中的乙個典型的例子,斐波那契數列。
題目:一般而言,兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼一年以後可以繁殖多少對兔子?
分析:我們不妨拿新出生的一對小兔子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 輸入格式...