菲波那契数列(OpenJ_Bailian - 2753)
Time limit 1000 ms
Memory limit 65536 kb
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数是多少。
Input
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 20)
Output
输出有n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数的大小
Sample Input
4
5
2
19
1
Sample Output
5
1
4181
1
解题思路
这其实是一道非常基础的递推题目。
由于斐波那契数列存在 x1 + x2 = x3 的这样子的递推关系,所以就可以利用这样子的关系,进行不断的递推就可以得到答案。
由于这道题十分基础,所以可以直接递推,其他此类题目的升级版可能会因为时间复杂度过高出现TL的情况,出现TL时需要自行打表找规律。
代码
#include<iostream>
#include<cstdio>
using namespace std;
int f(int x)
{
int ans;
if(x==1||x==2) return 1;
if(x>=3) ans = f(x-1) + f(x-2);
return ans;
}
int main()
{
int n;
int a;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
cin>>a;
cout<<f(a)<<endl;
}
}