算法基础:递归---Fibonacci数列

本文详细介绍了斐波那契数列的概念及其递归与递推实现方式,并通过两个实例展示了如何避免整数溢出问题。

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

又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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*)


代码以及算法都比较简单如下:



import java.util.Scanner;

public class Fibonacci {
    public static void main(String args[]) {

        Scanner input = new Scanner(System.in);

        int n, remainder = 1;
        System.out.printf("请输入所求数列数目:" + '\n');
        n = input.nextInt();

        System.out.print(Fibo(n));
    }

    static int Fibo(int n) {
        if (n <= 2) {
            return 1;
        }
        return Fibo(n - 1) + Fibo(n - 2);
    }
}


另外刚刚做了蓝桥杯里面的一个关于斐波那契数列的题目,题目以及代码如下:



import java.util.Scanner;

public class Fibonacci2 {
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);

        int a=1,b=1,sum=1;
        int n;
        n = input.nextInt();

        if (n<=2)
            System.out.println(sum);
        else {
            for (int i=3;i<=n;i++){
                sum=(a+b)%10007;
                a=b;
                b=sum;
            }
            System.out.println(sum);
        }
    }
}
 

这是一个很水的题目,需要提及的一点在于需要防止数列过大而造成溢出,所以要在循环体中每次计算前都加上一个判断,判断是否超过给定数字的大小。

另外,这个题目代码用的是递推不是递归,如果用一个方法写递归算法再在主方法中引用的话运行会超时。


ps:刚开始我想着是不是用数组存储大数一样,在n的数目很大的时候将数列存储起来,但是想着不会那么麻烦没有实验。或许以后看见可能会试试。

         Over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值