斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……。在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。这个数列从第3项开始,每一项都等于前两项之和。
代码:
递归实现: 就是将n的前项都算出来,最终得到第n项。当n比较大时,时间复杂度会很高。
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
const int maxn=1e5+10;
long long Fib[maxn];
long long Fibonacci(int x)
{
if(Fib[x]!=0)
return Fib[x];
else
return Fib[x]=Fibonacci(x-1)+Fibonacci(x-2);
}
int main()
{
memset(Fib,0,sizeof(Fib));
Fib[0]=1;Fib[1]=1;Fib[2]=1;Fib[3]=2;
int x;
printf("请输入你想要得知的第n项斐波那契数:(提示该数不得超过50)\n");
scanf("%d",&x);
printf("%d\n",Fibonacci(x));
return 0;
}
非递归实现:
#include<stdio.h>
#include<string.h>
long long Fib[50];
int main()
{
memset(Fib,0,sizeof(Fib));
Fib[0]=1,Fib[1]=1,Fib[2]=1,Fib[3]=2;
int x;
printf("请输入一个不大于50的数,来获得这一项的斐波那契数:\n");
scanf("%d",&x);
for(int i=4;i<=x;i++)
Fib[i]=Fib[i-1]+Fib[i-2];
printf("%lld\n",Fib[x]);
return 0;
}