【Java实战】——手撕斐波那契数列

🎁个人主页:User_芊芊君子

🎉欢迎大家点赞👍评论📝收藏⭐文章

🔍系列专栏:【Java】内容概括


这里写目录标题

1.什么是斐波那契数列?

斐波那契数列(Fibonacci sequence),又称黄金分割数列 1,因数学家莱昂纳多·斐波那契(Leonardo 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*)。

这个数列从第3项开始 ,每一项都等于前两项之和。

2.代码实现

2.1 递归实现

递归是一种直接或间接调用自身的编程技术。根据斐波那契数列的定义,我们可以很容易地使用递归方法来实现。

java 复制代码
public class Test {
    public static int fib(int n) {
        if (n == 1) {
            return 0;
        }
        if (n == 2) {
            return 1;
        }
        int tmp = fib(n - 1) + fib(n - 2);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(fib(1));
        System.out.println(fib(2));
        System.out.println(fib(3));
        System.out.println(fib(4));
        System.out.println(fib(5));
        System.out.println(fib(6));
    }
}

递归实现的优缺点:

  • 优点:代码简洁直观,符合斐波那契数列的数学定义,易于理解。

  • 缺点:存在大量的重复计算,时间复杂度较高(约为 O(2^n)),当 n 较大时,程序运行效率极低,甚至可能导致栈溢出错误。

2.2 迭代实现

迭代是通过循环的方式,逐步计算出每一项的值。相比于递归,迭代方式可以避免重复计算,提高效率。

java 复制代码
public class Test {
    public static int fib(int n){
        if(n == 1){
            return 0;
        }
        if(n == 2){
            return 1;
        }
        int f1 = 0;
        int f2 = 1;
        int f3 = 0;
        for (int i = 3; i <= n; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }
    public static void main(String[] args) {
        System.out.println(fib(1));
        System.out.println(fib(2));
        System.out.println(fib(3));
        System.out.println(fib(4));
        System.out.println(fib(5));
        System.out.println(fib(6));
    }
}

迭代实现的优缺点:

  • 优点:时间复杂度为 O(n),避免了递归的重复计算,效率更高,不会出现栈溢出问题。

  • 缺点:代码相对递归方式稍显复杂,理解起来可能需要更多时间。

3.执行结果

【总结】

  • 本文介绍了斐波那契数列的基本概念,并通过Java语言展示了两种不同的实现方式:递归和迭代实现。每种方式都有其特点和适用场景
  • 在实际编程中,我们可以根据具体需求选择合适的实现方式,以达到最优的性能和效果。
  • 希望通过本文的介绍,你对斐波那契数列及其Java实现有了更深入的理解和掌握!
相关推荐
折哥的程序人生 · 物流技术专研11 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang12 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅13 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_13 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
skywalk816314 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ198714 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码14 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
Hui Baby15 小时前
Spring Security
java·后端·spring
IT笔记15 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode15 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn