斐波那契数列(递推)

斐波那契数列

输入整数 N,求出斐波那契数列中的第 N 项是多少。

斐波那契数列的第 0 项是 0,第 1 项是 1,从第 2 项开始的每一项都等于前两项之和。

输入格式

第一行包含整数 T,表示共有 T 个测试数据。

接下来 T 行,每行包含一个整数 N。

输出格式

每个测试数据输出一个结果,每个结果占一行,

结果格式为 Fib(N) = x,其中 N 为项数,x 为第 N 项的值。

数据范围

0≤N≤60

输入样例:

3
0
4
2

输出样例:

Fib(0) = 0
Fib(4) = 3
Fib(2) = 1

简单朴素递推: 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100;
typedef long long ll;
ll t,f[N],temp;
int main(){
	cin>>t;
	f[0]=0;
	f[1]=1;
	while(t){
		cin>>temp;
		for(int i=2;i<=temp;i++){
			f[i]=f[i-1]+f[i-2];
		}
		cout<<"Fib("<<temp<<") = "<<f[temp]<<endl;
		t--;
	}
	return 0;
} 

空间优化递推 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100;
typedef long long ll;
ll t,a,b,c,temp;
int main(){
	cin>>t;
	while(t){
		cin>>temp;
		t--;
		a=0;
		b=1;
		c=0;
		if(!temp){
			cout<<"Fib("<<temp<<") = "<<a<<endl;
			continue;
		}
		if(temp==1){
			cout<<"Fib("<<temp<<") = "<<b<<endl;
			continue;
		}
		for(int i=2;i<=temp;i++){
			c=a+b;
			a=b;
			b=c;
		}
		cout<<"Fib("<<temp<<") = "<<c<<endl;
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/m0_56501550/article/details/129776986