计算Fibonacci数列前20个数值之和

发布时间:


计算Fibonacci数列前20个数值之和

问题计算Fibonacci数列前20个数值之和,其中Fibonacci数列有如下的迭代规律:
第一个元素:F11第二个元素:F21第三个元素:F3F1F2……
n个元素:FnFn1Fn2

分析根据Fibonacci数列的递推规律,必须已知第n-1项和第n-2项之后,才可以计算
出第n项。可以同时计算第n1项和第n项序列的值。所需数据与算法如下。

数据要求
问题中的常量:
问题的输入:intf1=1intf2=1问题的输出:unsignedlongsum

设计初始算法
1f1f2初始化为1,并初始化sum的值为sum=02计算第n-1项并求和,再计算第n项并求和。3循环执行步骤2至求出前20项之和,输出sum算法细化1初始化:
f1=1;
f2=1;
sum=f1+f2;
n=1n=2f1=1f2=1;因此前两项之和为sum=f1+f2
2循环体的语句如下:
f1=f1+f2;/*计算第n-1*/sum+=f1;f2=f2+f1;/*计算第n*/sum+=f2;
n=3f3=f1+f2。如果f3f1表示,则f1=f1+f2;因此前三项之和为sum=sum+f1
n=4f4=f3+f2。如果f3f1表示,f4f2表示,则f2=f2+f1。前四项之和为sum=sum+f2



/*序列中第1*//*序列中第2*/
/*序列前20项之和*/


依次类推,可以求解出前n项之和。
3由于循环次数已知,因此可以使用for语句。由于循环一次计算2项,因此循
流程图



9次可以计算18项数据的和,加上前两项之和,正好为前20项之和。循环条件为
for(i=1;i<10;i++{……}
开始
f1=1f2=1
sum=f1+f2

i=1

i<10
N
Y
f1=f1+f2


sum=f1+sum





f2=f1+f2

sum=sum+f2
输出sum
结束



实现程序代码如下:
#include""voidmain({
unsignedlongf1,f2,sum;/*f1代表第n2项,f2代表第n1项,sum代表*/inti;f1=1;f2=1;sum=f1+f2;{}
printf("sum=%d",sum;}

运行结果测试
如果将数据的声明由数据类型unsignedlong改为int,则程序仍然能得到正确的结果;如果再将循环条件改为i<20,即求序列前40项之和,则得到结果3127,显然该结果是一个错误的结果。该测试说明:要注意保存序列和变量的类型,一定要能够容纳最终结果,不要因为超出类型的表示范围而导致错误的结果。
sum=17710f1=f1+f2;sum+=f1;f2=f2+f1;sum+=f2;


/*计算第n*/


/*计算第n1*/



/*计算第一项,第二项*//*计算第一项与第二项之和*//*累加剩余的18*/
for(i=1;i<10;i++


计算Fibonacci数列前20个数值之和

相关推荐