【问题描述】有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13,······,编程求这个序列的前20项之和。
方法一:
注意无论分子或者分子,都符合前两项之和等于第三项,这样我们就可以定义6个变量各自来表示分子和分母。如下图:
每一个循环都执行:mol1=mol2;mol2=mol3;mol3=mol1+mol2;这样就可以依次向后”平移一个单位“,知道前两项,就能表示出后面的项了。以上是分母子的操作,分母也是同样的操作。此外还需要定义一个变量sum来存储每次相加的和。具体代码如下:
#include<stdio.h>
int main()
{
float mol1=2.0,mol2=3.0,mol3=5.0;
int den1=1,den2=2,den3=3;
int i=0;
double sum=(2.0/1)+(3.0/2);//将前两项的和赋值给sum
for(i=0;i<18;i++)//只要循环18次,前两项的和已经赋值给sum
{
mol1=mol2;
mol2=mol3;
mol3=mol1+mol2;
den1=den2;
den2=den3;
den3=den1+den2;
sum+=(mol3/den3);
}
printf("前20项之和为%lf",sum);
return 0;
}
方法二:
注意观察各项分子分母之间的关系:
代码如下:
#include<stdio.h>
int main()
{
double mol=2.0,den=1.0,sum=0.0;
int i;
for(i=0;i<20;i++)
{
sum+=mol/den;
mol=mol+den;
den=mol-den;
}
printf("前20项的和为%lf",sum);
return 0;
}