前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >斐波那契数列

斐波那契数列

作者头像
cultureSun
发布2023-09-02 18:45:00
1950
发布2023-09-02 18:45:00
举报
文章被收录于专栏:cultureSun学安全cultureSun学安全

0x01

刷抖音突然刷到了斐波那契数列,突发奇想就用java写一个斐波那契数列。虽然很早之前学习算法,这应该是最基本的,但是对于一个干着普普通通工作的我已经是需要深思熟虑一番。

0x02

斐波那契数列是指从第3个数开始,每个数都是前两个数的和。数列的前几个数字如下所示:0、1、1、2、3、5、8、13、21、34、55、89……以此类推。 斐波那契数列在数学和计算机领域具有广泛的应用。它们可以描述自然界中许多现象,如植物的分枝、螺旋线形状等。在编程中,斐波那契数列常用于解决一些递归问题,也被用于算法优化和动态规划等方面。

0x03

直接看代码,从第一个数为 1 开始。

代码语言:javascript
复制
public class Feibonaqi {
    public static void main(String[] args) {
        int n = 3; // 要计算的斐波那契数列长度
        System.out.println("斐波那契数列第 " + n + " 个数为:");

        System.out.print(fibonacci(n) + " ");
        System.out.print(fibonacci2(n, new int[3]) + " ");
        System.out.print(fibonacci3(n) + " ");

    }

    public static int fibonacci(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1 || n == 2) {
            return 1;
        } else {
            int[] fib = new int[n + 1];
            fib[0] = 0;
            fib[1] = 1;
            fib[2] = 1;
            for (int i = 3; i <= n; i++) {
                fib[i] = fib[i - 1] + fib[i - 2];
            }
            return fib[n];
        }
    }

    public static int fibonacci2(int n, int[] fib) {
        if (n == 0) {
            return 0;
        } else if (n == 1 || n == 2) {
            return 1;
        } else {
            if (fib[0] == n) {
                return fib[2];
            }
            if (fib[0] == 0) {
                fib[0] = 2;
                fib[1] = 1;
                fib[2] = 1;
            }
            fib[0]++;
            int temp = fib[2];
            fib[2] = fib[1] + fib[2];
            fib[1] = temp;
            return fibonacci2(n, fib);
        }
    }

    public static int fibonacci3(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1 || n == 2) {
            return 1;
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }

}

一共有三个方法。 第一个方法是 gpt 写的,很简单,一个循环来计算第 n 个数的值。 第二个方法是我写的,采用了递归的方式写的。何谓递归,往下读: 递归是一种在程序执行过程中调用自身的技术。在递归过程中,问题会被不断地分解成规模更小的子问题,并通过递归调用解决子问题,最终得到问题的解。 递归通常有两个重要的部分:

  • 递归定义:将问题分解成规模更小的子问题,并使用与原问题相同的处理方式来解决子问题。
  • 递归边界:确定能够直接解决的问题,避免无限递归。

递归可以方便地解决某些类型的问题,例如树形结构和排列组合问题等。但是需要注意,如果递归层数过多或递归条件不正确,可能会导致堆栈溢出和性能下降等问题。因此,在使用递归时需要谨慎考虑递归的设计和性能问题。

写的很烂,时间复杂度与空间复杂度都不低。但是还记得递归需要注意的两个点,所以经过三分钟思考也写出来了。

第三个方法是我询问 gpt 怎么使用递归的方式写,gpt给出答案。 看到那一刻唤醒了记忆,这应该是斐波那契最优写法。

0x04

长期的没有数学思考,已经缺乏了数学思维。所以写的很烂。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01
  • 0x02
  • 0x03
  • 0x04
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档