斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、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*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
//递归法 #include<stdio.h> #include<stdlib.h> int fib(int n) { if(n<=1) return n;//第0个数为0;第一个数为1; else return fib(n-1)+fib(n-2);//第n数等于第n-1个数加上第n-2个数; } int main() { int n,count ; printf(" 求第n个斐波那契数 \n"); printf("请输入n的大小:"); scanf_s("%d",&n); printf("第%d个斐波那契数为:%d",n,fib(n)); system("pause"); return 0; }
输出结果:
这种算法会造成很多的重复造成计算量变大,运行变慢
#include<stdio.h>
#include<stdlib.h>
int fib(int n)
{
int a[100]={0,1};
if(n<=1)
return a[n];//第0个数为0;第一个数为1;
else
{
int i=0;
for(i=2;i<=n;i++)
a[i]=a[i-1]+a[i-2];
return a[n];
}//第n数等于第n-1个数加上第n-2个数;
}
int main()
{
int n;
printf(" 求第n个斐波那契数 \n");
printf("请输入n的大小:");
scanf_s("%d",&n);
printf("第%d个斐波那契数为:%d",n,fib(n));
system("pause");
return 0;
}
//此算法有明显的缺陷,只能求100以内的,并且速度不快
//采用参数法,只记录第n,n-1,n-2个数
#include<stdio.h>
#include<stdlib.h>
int fib(int n)
{
int a=0,b=1,c=n;
int i;
for(i=0;i<n-1;i++)
{
c=a+b;
a=b;//把第n-2赋给a
b=c;//把第n-1赋给b
}
return c;
}
int main()
{
int n;
printf(" 求第n个斐波那契数 \n");
printf("请输入n的大小:");
scanf_s("%d",&n);
printf("第%d个斐波那契数为:%d",n,fib(n));
system("pause");
return 0;
}