有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...用Java求出这个数列的前 20 项之和。
时间: 2024-09-28 15:05:01 浏览: 61
应用时间序列笔记+习题代码1
这种分数序列看起来像是斐波那契数列(Fibonacci sequence)的倒序,并且分子是第n个斐波那契数,分母是第n-1个斐波那契数。为了求出前20项的和,我们可以编写一个简单的Java程序利用递推的方式计算斐波那契数并计算其对应的倒序分数。
首先,我们需要一个函数来计算斐波那契数列:
```java
public long fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 2);
}
```
然后,我们可以构建一个列表来存储分数,以及一个变量来跟踪总和:
```java
List<Double> fractions = new ArrayList<>();
long sum = 0;
for (int i = 0; i < 20; i++) {
long numerator = fibonacci(i + 1);
long denominator = fibonacci(i);
fractions.add((double)numerator / denominator);
sum += fractions.get(i);
}
```
最后,我们返回总和:
```java
System.out.printf("前20项的和为: %.2f\n", sum);
```
完整代码:
```java
import java.util.ArrayList;
public class FibonacciFractions {
public static void main(String[] args) {
double sum = calculateSum(20);
System.out.printf("前20项的和为: %.2f\n", sum);
}
public static double calculateSum(int n) {
List<Double> fractions = new ArrayList<>();
long fibNum1 = 1, fibNum2 = 1, nextFib = 1;
for (int i = 0; i < n; i++, nextFib = fibNum1 + fibNum2) {
fractions.add((double)nextFib / fibNum2);
fibNum1 = fibNum2;
fibNum2 = nextFib;
}
return fractions.stream().mapToDouble(Double::doubleValue).sum();
}
}
```
注意:由于斐波那契数增长很快,对于大的n值,可能会导致数值溢出。你可以考虑使用大数库如BigInteger来避免这个问题。
阅读全文