斐波那契数列指的是这样一个数列:1 、1、2、3、5、8、13、21、34、55、89……是从第三项开始每一项都是前两项之和。
用递推的方法定义为:
f(0)=1;f(1)=1;
f(n)=f(n-1)+f(n-2) (n>=2,n∈N*)
可以用循环法、指针数组法实现,最不适合用递归的方法使用。
1、指针数组法
//指针数组法
void Show(int *arr,int len)
{
for (int i=0;i<len;i++)
{
printf("%5d ",arr[i]);
}
printf("\n");
}
void Fibon(int *arr,int len)
{
arr[0]=1;
arr[1]=1;
for(int i=2;i<len;i++)
{
arr[i]=arr[i-1]+arr[i-2];
}
}
int main()
{
int brr[10]={ };
int len=sizeof(brr)/sizeof(brr[0]);
Fibon (brr,len);
Show (brr,len);
return 0;
}
2、循环法
//循环法
int Fibon_for(int n) //O(n),O(1)
{
int f1 = 1;
int f2 = 1;
int f3 = 1;
for(int i=1;i<n;i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
int main()
{
for(int i=0;i<10;i++)
{
printf("%d ",Fibon_for(i));
}
return 0;
}
3、递归法(最不适合使用)
//递归法(最不适合用递归)
int Fibon(int n)
{
if(n==0 || n==1)
{
return 1;
}
else
{
return Fibon (n-1)+Fibon (n-2);
}
}
int main()
{
printf("%d\n",Fibon (10));
return 0;
}