斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
那么如何用c语言实现斐波那契数列呢?这里有三种方法,分别为数组,递归,递推。代码如下:
数组:
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main()
{
int i,f[100000]= {1,1},n;
while(scanf("%d",&n)!=EOF)
{
clock_t start,end;
start=clock();
for(i=2; i<n; i++)
f[i]=f[i-1]+f[i-2];
for(i=0; i<n; i++)
{
if(i%5==0)
printf("\n");
printf("%d ",f[i]);
}
end=clock();
printf("运行时间为:%f ms",difftime(end,start));
printf("\n");
}
return 0;
}
程序运行如下:
递归:
#include <stdio.h>
#include<time.h>
int Fibnacci(int n)
{
if(n == 0 )
return 0;
if(n == 1)
return 1;
else
return Fibnacci(n-1) + Fibnacci(n-2);
}
int main()
{
int n,i;
clock_t start,end;
while(scanf("%d",&n)!=EOF)
{
start=clock();
for(i = 1; i <= n; i++)
printf("%d ",Fibnacci(i));
if(i%5==0)
printf("\n");
printf("\n");
end=clock();
printf("运行时间为:%f ms\n",difftime(end,start));
}
return 0;
}
程序运行如下:
递推:
#include<stdio.h>
#include<time.h>
long Fibonacci(long n)
{
long f1,f2=1,f3=1,i;
if((n==1)||(n==2))
return f2;
else
{
for (i=3; i<=n; i++)
{
f1=f2+f3;
f2=f3;
f3=f1;
}
}
return f1;
}
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
clock_t start,end;
start=clock();
for(i=1; i<=n; i++)
{
printf("%ld ",Fibonacci(i));
if(i%5==0)
printf("\n");
}
end=clock();
printf("运行时间为:%f ms",difftime(end,start));
printf("\n");
}
return 0;
}
程序运行如下: