C++實現Fibonacci數列
C++實現Fibonacci數列前20個數。這個數列有如下特點:第1,2兩個數都爲1,1從第3個數開始,該數前面兩個數之和。即爲:
F1=1(n=1)
F2=1(n=2)
F n F_n Fn= F n − 1 F_{n-1} Fn−1+ F n − 2 F_{n-2} Fn−2(n≥3)
解題思路:
這個是一個很有趣的古典數學問題:有一對兔子,從出生後第三個月起每個月都生一對小兔子。小兔子長到第3個月後又生一對兔子。假設所有兔子都不死,問每個月的兔子總數爲多少?
第幾個月 | 小兔子對數 | 中兔子對數 | 老兔子對數 | 兔子總數 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 | 1 |
3 | 1 | 0 | 1 | 2 |
4 | 1 | 1 | 1 | 3 |
5 | 2 | 1 | 2 | 5 |
6 | 3 | 2 | 3 | 8 |
7 | 5 | 3 | 5 | 13 |
… | … | … | … | … |
不滿1個月的爲小兔子,滿1個月不滿2個月的爲中兔子,滿3個月以上的爲老兔子。可以看到每個月兔子的總數依次爲1,1,2,3,5,8,13…這就是Fibonacci數列。
編寫程序:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
long int f1=1, f2=1;
int i;
for ( i = 1; i <=20; i++)//每次輸出兩個數,故循環40÷2=20次
{
cout << setw(12) << f1 << setw(12) << f2;//設備輸出的字段寬帶爲12
if (i % 2 == 0)cout << endl;
f1 = f1 + f2;//等號左邊的f1代表第3個數,是第1個第2個數之和
f2 = f1 + f2;//等號左邊的f2代表第4個數,是第2個第3個數之和
}
system("pause");
return 0;
}