扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#include stdio.h
成都创新互联是专业的达茂旗网站建设公司,达茂旗接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行达茂旗网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
main( ){
long f1,f2,f;
int i,n;
scanf("%d",n);
f1=f2=1;
if(n=2)
f=1;
else
for(i=3;i=n;i++){
f=f1+f2;
f1=f2;
f2=f;
}
printf("%ld\n",f);
}
波那契数列,又称黄金分割数列,指的是这样一个数列: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起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
工具/材料
visual studio
01
求斐波那契数列有两种思路:循环与递归。我们首先来看循环的方式。为了与实际下标对应,我设置数组第一项为0。
02
对索引i的值进行判断:i==1,则令a[i]=1。否则a[i]=a[i-1]+a[i-2];
03
然后再添加一个打印函数,只需要打印第1-n项即可。
04
编写测试函数,用n=5与n=10测试,代码与结果如下:
05
在这里,我写出求第n项的函数,接下来只需要添加一个外函数就可以求出。
06
接下来,测试n=5与n=10,即依次调用递归函数计算每一个值。
07
运行的结果如下,与之前的循环一致。
程序的算法是用了递归调用 ,就是一种直接或者间接地调用自身的算法,且必须有一个明确的递归结束条件,称为递归出口。 输入一个数后,调用Fibonacci(int n)函数并执行,当判断n不等于1或者2时,则不断地执行t1=Fibonacci(n-1);t2=Fibonacci(n-2);语句,直到n=1或者n=2时才有确定的值1,然后再递推回去就得到Fibonacci(int n)的值了。
斐波那契数列问题,做为学习一般都用递归来写,默认情况下都设置程序运行时默认的栈空间大小为1MB,下面是递归调用的实例。
#includestdio.h
int fibo(int a)
{
if(a=2)
return 1;
else
return fibo(a-1)+fibo(a-2);
}
int main()
{
int a;
while(scanf("%d",a)!=EOF)
printf("%d\n",fibo(a));
return 0;
}
C语言源程序如下:
#includestdio.h
int main()
{
int array[100]={1,1};//斐波那契数列前两个元素均为0
int i=0;//循环变量
int n=20;//数列需要求的个数
int sum = 0;//和变量
for(i=2;in+1;i++)//按递推原理依次求出后续元素
{
array[i]=array[i-1]+array[i-2];//数列原理
}
printf("arr[1]-arr[%d] = ", n);//提示输出数列元素
for (i = 0; i n; i++)//遍历数列
{
printf("%d ",array[i]);//输出arr[1]-arr[n]元素内容
sum += array[i];//顺便进行求和
}
printf("\n%d ", sum);//输出求和结果
return 0;
}
程序运行结果如下:
扩展资料:
利用递归原理进行求斐波那契数列的求解和求前n项和:
#includestdio.h
int fibonacci(int n) //递归函数
{
if (n == 0 || n == 1)
return 1;
if (n 1)
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main()
{
int i = 0;
for (i = 0; i 30; i++)
{
printf("fibonacci(%d) = %d\n", i, fibonacci(i));
}
return 0;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流