1. 程式人生 > 實用技巧 >1201:菲波那契數列

1201:菲波那契數列

1201:菲波那契數列

時間限制: 1000 ms 記憶體限制: 65536 KB
提交數: 11383 通過數: 6622
【題目描述】
菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。

給出一個正整數a,要求菲波那契數列中第a個數是多少。

【輸入】
第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a(1≤a≤20)。

【輸出】
輸出有n行,每行輸出對應一個輸入。輸出應是一個正整數,為菲波那契數列中第a個數的大小。

【輸入樣例】
4
5
2
19
1
【輸出樣例】
5
1
4181
1


以前剛學習百年城的時候遇到斐波那契數列的時候會用遞迴演算法來算,覺得很高階,但是隨著學習的深入,發現動態規劃來做更省時省力。

動態規劃會記錄數列中的每一項的值,從而在計算的時候,用到哪一項就直接引用哪一項,省去了遞迴每一次做都要從頭開始的時間。
啥也不說了,程式碼奉上,寫的不要勿怪,新手上道。

#include<iostream>

using namespace std;

int n;
int a[1010];

int main(){
	cin>>n;
	
	a[1]=1;
	a[2]=1;
	for(int i=3;i<=20;i++){
		a[i]=a[i-1]+a[i-2];
	}
	
	while(n--){
		int x;
		cin>>x;
		cout<<a[x]<<endl;
	}
	
	return 0;
}