功能:求一分数序列2/1,3/2,5/3,8/5,13/8,21/13… 的前n项之和。 说明:每一分数的分母是前两项的分母之和,每一分数的 分子是前两项的分子之和 例如:求前20项之和的值为32.660。
时间: 2024-10-19 11:04:36 浏览: 20
ACMI/CSP 比赛经验分享 & 代码程序资源
这个分数序列实际上是一种著名的数学模式,被称为Fibonacci数列的倒数形式。Fibonacci数列是这样一个序列:0, 1, 1, 2, 3, 5, 8, 13, 21... 其特点是每个数字都是前两个数字之和。对于它的倒数形式,即分数序列,我们可以观察到每个分数的分子是当前项的Fibonacci数,而分母是上一项的Fibonacci数。
为了计算前n项的和,你可以采用动态规划的方式,从第0项开始逐项计算。以下是步骤:
1. 初始化前两个值:`a_0 = 2/1` 和 `a_1 = 3/2`。
2. 对于`i`从2到n,计算第`i`项的分数:`a_i = (fibonacci(i) + fibonacci(i-1)) / (fibonacci(i-1))`,其中`fibonacci(i)`是第`i`个Fibonacci数。
3. 将第`i`项添加到累计和`sum`中:`sum += a_i`。
4. 结果就是`sum`。
下面是Java代码示例:
```java
import java.util.ArrayList;
public class FractionSum {
public static double fibonacciSum(int n) {
double sum = 2.0 / 1.0; // 第0项
double prev = 1.0; // 上一项的倒数
ArrayList<Double> fibs = new ArrayList<>(); // 存储Fibonacci数
fibs.add(1.0); // 初始化第一个Fibonacci数
for (int i = 1; i < n; i++) {
double nextFib = fibs.get(i) + fibs.get(i - 1); // 计算下一个Fibonacci数
fibs.add(nextFib);
double currentFraction = nextFib / prev; // 当前项分数
sum += currentFraction;
prev = nextFib; // 更新上一项的倒数
}
return sum;
}
public static void main(String[] args) {
int n = 20;
System.out.println("前" + n + "项的和为:" + fibonacciSum(n));
}
}
```
阅读全文