求解:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。要程序也要答案

如题所述

2/1 3/2 5/3 8/5 13/8 21/13 34/21 55/34 89/55 144/89 233/144 377/233 610/377 987/610 1597/987 2584/1597 4181/2584 6765/4181 10946/6765 17711/10946
前20项之和:32.660259
附上程序:
#include <stdio.h>

void main()
{
int i;
float a, b, c, s;

a = b = 1.0;
c = 0;
s = 0;
for(i = 0; i < 20; i++)
{
c = a + b;
s = s + c / a;
printf("%.0f/%.0f ", c, a);
b = a;
a = c;
}
printf("\n%f\n", s);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-09-08
public class RabbitBorn {

public static void main(String[] args) {
//因为是分数,所以创建一个double类型的数组
//double [] m=new double[21]为什么这个数组的长度要选择21呢?
//因为我们把这个拆解成两部分看,分子数一个数组,分母也是一个数组,我们可以发现一个规律
//就是分子的数是从数组的[1]下标开始的,而分母则是从[0]下标开始的,所以要选择长度是21的。
double [] m=new double[21];
m[0]=1;
m[1]=2;
//要从下表为二开始,如果是从0,1开始就会数组越界
for(int i=2;i<21;i++) {
m[i]=m[i-1]+m[i-2];
}
double sum=0;
double [] c=new double[20];
for(int j=0;j<c.length;j++) {
c[j]=m[j+1]/m[j];
sum+=c[j];
}
System.out.println(sum);
}
}
第2个回答  2011-11-03
分母可用以下公式:
F(n+2) = F(n+1) + F(n)
F(1)=F(2)=1。
它的通项求解如下:
F(n+2) = F(n+1) + F(n) => F(n+2) - F(n+1) - F(n) = 0
令 F(n+2) - aF(n+1) = b(F(n+1) - aF(n))
展开 F(n+2) - (a+b)F(n+1) + abF(n) = 0
显然 a+b=1 ab=-1
由韦达定理知 a、b为二次方程 x^2 - x - 1 = 0 的两个根
解得 a = (1 + √5)/2,b = (1 -√5)/2 或 a = (1 -√5)/2,b = (1 + √5)/2

令G(n) = F(n+1) - aF(n),则G(n+1) = bG(n),且G(1) = F(2) - aF(1) = 1 - a = b,因此G(n)为等比数列,G(n) = b^n ,即
F(n+1) - aF(n) = G(n) = b^n --------(1)

在(1)式中分别将上述 a b的两组解代入,由于对称性不妨设x = (1 + √5)/2,y = (1 -√5)/2,得到:
F(n+1) - xF(n) = y^n
F(n+1) - yF(n) = x^n
以上两式相减得:
(x-y)F(n) = x^n - y^n
F(n) = (x^n - y^n)/(x-y) = {[(1+√5)/2]^n-[(1-√5)/2]^n}/√5
同样分子也适合,为此可以得出
第3个回答  2011-11-03
2/1
相似回答