搜索
您的当前位置:首页正文

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

2020-09-06 来源:步旅网


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

问题 计算Fibonacci数列前20个数值之和,其中Fibonacci数列有如下的迭代规律:

第一个元素:F11 第二个元素:F21 第三个元素:F3F1F2 ……

第n个元素:FnFn1Fn2

分析 根据Fibonacci数列的递推规律,必须已知第n-1项和第n-2项之后,才可以计算

出第n项。可以同时计算第n-1项和第n项序列的值。所需数据与算法如下。

数据要求

问题中的常量: 无

问题的输入: int f1=1 int f2=1 问题的输出: unsigned long sum

设计 初始算法

1. f1和f2初始化为1,并初始化sum的值为sum=0。 2. 计算第n-1项并求和,再计算第n项并求和。 3. 循环执行步骤2至求出前20项之和,输出sum。 算法细化 1. 初始化:

f1=1;

f2=1;

sum= f1+f2;

当n=1,n=2时f1=1,f2=1;因此前两项之和为sum=f1+f2。

2. 循环体的语句如下:

f1=f1+f2; /*计算第n-1项*/ sum+=f1; f2=f2+f1; /*计算第n项*/ sum+=f2;

当n=3时f3=f1+f2。如果f3用f1表示,则f1=f1+f2;因此前三项之和为sum=sum+f1。

当n=4时f4=f3+f2。如果f3用f1表示,f4用f2表示,则f2=f2+f1。前四项之和为sum=sum+f2。

/*序列中第1项*/ /*序列中第2项*/

/*序列前20项之和*/

依次类推,可以求解出前n项之和。

3. 由于循环次数已知,因此可以使用for语句。由于循环一次计算2项,因此循

流程图

环9次可以计算18项数据的和,加上前两项之和,正好为前20项之和。循环条件为

for(i=1;i<10;i++) { …… }

开始f1=1,f2=1sum=f1+f2 i=1 i<10NYf1=f1+f2 sum=f1+sum f2=f1+f2 sum=sum+f2输出sum结束

实现 程序代码如下:

#include \"\" void main() {

unsigned long f1,f2,sum; /*f1代表第n-2项,f2代表第n-1项,sum代表和*/ int i; f1=1;f2=1; sum=f1+f2; { }

printf(\"sum=%d\ }

运行结果 测试

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

sum=17710 f1=f1+f2; sum+=f1; f2=f2+f1; sum+=f2;

/*计算第n项*/

/*计算第n-1项*/

/*计算第一项,第二项*/ /*计算第一项与第二项之和*/ /*累加剩余的18项*/

for(i=1;i<10;i++)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top