斐波拉契数列
已知有1数列,F[i]={F[i-1]+F[i-2] i>2
F[i]=1 i<=2
求F[n]?
法1:动态规划
直接根据题意,F[i]=F[i-1]+F[i-2]#include<cstdio>
int main()
{
int n;
scanf("%d",&n);
const int m=n;
auto long long a[m+1];
a[1]=a[2]=1;
for(int i=3;i<=n;++i)a[i]=a[i-1]+a[i-2];
printf("%lld",a[n]);
return 0;
}
然而,时空复杂度O(n),大数据容易MLE
法2:递归
#include<cstdio>
long long Fib(int n)
{
if(n<3)return 1;
return Fib(n-1)+Fib(n-2);
}
int main()
{
int n;
scanf("%d",&n);
printf("%lld",Fib(n));
return 0;
}
时间复杂度O(2^n),空间复杂度O(1),大数据一定TLE