1. 程式人生 > >【NOI】1755:菲波那契數列/ 2.2基本演算法之遞迴和自呼叫函式

【NOI】1755:菲波那契數列/ 2.2基本演算法之遞迴和自呼叫函式

傳送門:檢視

1755:菲波那契數列
總時間限制: 

1000ms

 

記憶體限制: 

65536kB

描述

菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。
給出一個正整數a,要求菲波那契數列中第a個數是多少。

輸入

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

輸出

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

樣例輸入

4
5
2
19
1

樣例輸出

5
1
4181
1

斐波那契數列指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........

這個數列從第3項開始,每一項都等於前兩項之和。

斐波那契數列的定義者,是義大利數學家列昂納多·斐波那契(Leonardo Fibonacci),生於公元1170年,卒於1250年,籍貫是比薩。他被人稱作“比薩的列昂納多”。1202年,他撰寫了《算盤全書》(Liber Abacci)一書。他是第一個研究了印度和阿拉伯數學理論的歐洲人。他的父親被比薩的一家商業團體聘任為外交領事,派駐地點於

阿爾及利亞地區,列昂納多因此得以在一個阿拉伯老師的指導下研究數學。他還曾在埃及敘利亞、希臘、西西里普羅旺斯等地研究數學。 

 AC的程式碼如下:

#include<iostream>
using namespace std;
int F(int n)
{
	int a;
	if(n==1||n==2)return 1;
	else { a=F(n-1)+F(n-2); return a; }
}
int main()
{
	int n,b[1000],i;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>b[i];
	for(i=0;i<n;i++)
		cout<<F(b[i])<<endl;
	return 0;
}

這道題要用遞迴,不用遞迴比較麻煩(因為我一時半會兒也沒寫好),2.2裡的題目細心想想都做得出來,不提倡直接複製,各位大佬有什麼意見可以再評論區提。