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

  • 格式:doc
  • 大小:117.00 KB
  • 文档页数:4

计算Fibonacci 数列前20个数值之和
问题 计算Fibonacci 数列前20个数值之和,其中Fibonacci 数列有如下的迭代规律:
第一个元素:11=F
第二个元素:12=F
第三个元素:213F F F +=
……
第n 个元素:21--+=n n n F F F
分析 根据Fibonacci 数列的递推规律,必须已知第n-1项和第n-2项之后,才可以计算
出第n 项。

可以同时计算第n -1项和第n 项序列的值。

所需数据与算法如下。

数据要求
问题中的常量:

问题的输入:
int f1=1
/*序列中第1项*/ int f2=1
/*序列中第2项*/
问题的输出:
unsigned long sum
/*序列前20项之和*/
设计 初始算法
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。

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

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

由于循环一次计算2项,因此循环9次可以计算18项数据的和,加上前两项之和,正好为前20项之和。

循环
条件为
for(i=1;i<10;i++)
{
……
}
流程图
实现程序代码如下:
#include ""
void main()
{
unsigned long f1,f2,sum; /*f1代表第n-2项,f2代表第n-1项,sum代表和*/
int i;
f1=1;f2=1; /*计算第一项,第二项*/
sum=f1+f2; /*计算第一项与第二项之和*/
for(i=1;i<10;i++) /*累加剩余的18项*/
{
f1=f1+f2; /*计算第n-1项*/
sum+=f1;
f2=f2+f1; /*计算第n项*/
sum+=f2;
}
printf("sum=%d",sum);
}
运行结果sum=17710
测试如果将数据的声明由数据类型unsigned long改为int,则程序仍然能得到正确的结果;如果再将循环条件改为i<20,即求序列前40项之和,则得到结果3127,显然该结果是一个错误的结果。

该测试说明:要注意保存序列和变量的类型,一定要能够容纳最终结果,不要因为超出类型的表示范围而导致错误的结果。