一文解决斐波那契数列求前n项和;和求第n个数是多少的问题;斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

该代码实现了一个计算斐波那契数列第20项的程序,采用三种不同的递归方法:方法一从0开始,方法二从1开始,方法三使用数组。代码中还包括了使用for循环计算斐波那契数列前n项和的功能。通过输入n值,可以获取相应项的数值和数列和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)= 0,F(1)= 1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*),请使用递归方式计算第 20 个数为多少 ?

一、核心代码如下:

package homework10.homework1028;

import java.util.Scanner;

/**
 * 斐波那契数列(Fibonacci)又称黄金分割数列,
 * 指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
 * 在数学上,斐波纳契数列以如下被以递归的方法定义:
 * F(0)= 0,F(1)= 1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*),
 * 请使用递归方式计算第 20 个数为多少 。
 */
public class Demo {
    public static void main(String[] args) {
       // 请使用递归方式计算第 20 个数为多少 。
        int f1 = f1(20);
        System.out.println("第一种方法得出的结果为:"+f1);

        int f2 = f2(20);
        System.out.println("第二种方法得出的结果为:"+f2);

        f3(20);

        /**
         * 斐波那契数列求和的方法如下:
         * 利用for循环
         */
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入n: ");
        int n = scan.nextInt();
        int sum = 0;
        for (int i = 1; i <= n; i++) {
           sum+=f1(i);//方法可根据实际情况灵活调用
        }
        System.out.println("斐波那契数列的前"+n+"项和为:"+sum);
    }

    /**
     * 方法一:
     * 用递归解决斐波那契数列的问题
     * 指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
     * @param n
     * @return
     */
    public static int f1(int n){
        if(n == 1){
            return 0;
        }
        if(n == 2 || n == 3){
            return 1;
        }
        return f1(n-1)+f1(n-2);
    }

    /**
     * 方法二:
     * 用递归解决斐波那契数列的问题
     * 指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
     * @param n
     * @return
     */
    public static int f2(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        return f2(n-1)+f2(n-2);
    }

    /**
     * 方法三:用数组的方式解决斐波那契数列的问题
     * 指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
     * 另外一种情况上面上面已有方法
     * @param n
     */
    public static void f3(int n){//n>=2的条件下
        int[] array = new int[n];
        array[0] = 0;
        array[1] = 1;
        for (int i = 2; i < n; i++) {
            array[i] = array[i-1]+array[i-2];
            if(i == (n-1)){
                //输出第n项的数字
                System.out.println("第三种方法得出的结果为:"+array[i]);
            }
        }
    }
}

二、代码运行结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

faramita_of_mine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值