分数序列的前20项之和

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

这里写图片描述

import javax.swing.JOptionPane;

public class CalSum {
    //分数序列:2/1,3/2,5/3,8/5,13/8,21/13...
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, calSum(20));
    }

    static String calSum(int n) {
        double sum = 0;
        for (int i=1; i<=n; i++) {
            sum += getNum(i);
        }
        return String.format("%.5f", sum);
    }

    static double getNum(int n) {
        return getSequence(n+1)/(double)getSequence(n);
    }

    static int getSequence(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        return getSequence(n-1)+getSequence(n-2);
    }
}
分数序列 \( \frac{2}{1} + \frac{3}{2} + \frac{5}{3} + \frac{8}{5} + \ldots + \frac{F_n}{F_{n-1}} + \ldots + \frac{F_{20}}{F_{19}} \) 的20之和,其中 \( F_n \) 是第n个斐波那契数。由于斐波那契数列的性质,每个后续的分数的分子都是当的斐波那契数,而分母是面的斐波那契数。这样的序列在数学上称为“黄金分割数列”的倒置形式。 计算此类序列的和通常需要一种高效的算法,因为直接计算每个分数然后相加效率较低。一个常见的做法是使用动态规划或者记忆化搜索来存储已经计算过的斐波那契数值,以便减少重复计算。下面是一个简单的C程序示例,采用了动态规划的方式: ```c #include <stdio.h> #include <stdlib.h> // 斐波那契数列辅助函数,采用动态规划存储 long long fib_cache[21]; // 假设我们只求到第20 long long fibonacci(int n) { if (fib_cache[n] != 0) // 如果已计算过,直接返回结果 return fib_cache[n]; if (n <= 1) // 基本情况 return fib_cache[n] = n; else return fib_cache[n] = fibonacci(n - 1) + fibonacci(n - 2); } int main() { int n = 20; long long total = 0; // 初始化两个斐波那契数 fib_cache[0] = 0, fib_cache[1] = 1; for (int i = 2; i <= n; ++i) { total += ((long long)fibonacci(i)) * fibonacci(i - 1); // 计算分数值 } printf("20分数和为: %lld\n", total); return 0; } ``` 这个程序首先初始化两个斐波那契数,然后通过循环计算每个分数的值,并将其累加起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值