递归之斐波那契数列java的3种方法

递归之斐波那契数列Java的3种方法

什么是斐波那契数列

在数学中,斐波那契数列是以递归的方式定义的:前两个数字是0和1,随后每个数字都是前两个数字的和。

斐波那契数列的前几个数字是0、1、1、2、3、5、8、13、21、34……以此类推。

三种递归方法实现斐波那契数列

方法1:最基本的递归方法

这是最基本的递归方法,但是由于重复计算太多,不适合大规模的计算,速度很慢。

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

方法2:加入缓存的递归方法

我们可以使用一个数组来存储每个子问题的解,避免了重复计算。这种方法被称为“记忆化搜索”或“自顶向下的动态规划”,速度较上一个方法提高了很多。

public static int fib2(int n) {
    int[] cache = new int[n + 1];
    return fib2Helper(cache, n);
}

private static int fib2Helper(int[] cache, int n) {
    if (n <= 1) {
        return n;
    } else if (cache[n] != 0) {
        return cache[n];
    } else {
        int result = fib2Helper(cache, n - 1) + fib2Helper(cache, n - 2);
        cache[n] = result;
        return result;
    }
}

方法3:非递归方法

我们也可以使用非递归方法来计算斐波那契数列。这个方法使用了一个数组来存储每个子问题的解,避免了重复计算。这种方法被称为“自底向上的动态规划”,速度是最快的。

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

示例说明

示例1

我们要求斐波那契数列的第10项,可以调用方法1:

int result = fib1(10);
System.out.println(result);

输出为55。

示例2

我们要求斐波那契数列的第20项,可以调用方法3:

int result = fib3(20);
System.out.println(result);

输出为6765。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:递归之斐波那契数列java的3种方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Vue2.0 slot分发内容与props验证的方法

    Vue2.0 Slot分发内容与Props验证的方法攻略 Slot分发内容 在Vue2.0中,使用Slot可以将内容分发到组件的特定位置。以下是使用Slot分发内容的方法: 在组件模板中定义Slot:在组件的模板中使用<slot></slot>标签来定义一个Slot。例如: <template> <div> &…

    other 2023年8月21日
    00
  • Ubuntu安装arm-linux-gcc 步骤

    Ubuntu安装arm-linux-gcc 步骤 如果您想在Ubuntu系统下编译ARM嵌入式Linux系统的代码,您需要先安装ARM交叉编译器。在Ubuntu中安装ARM交叉编译器有多种方法,本文将为您介绍其中一种方法。 步骤一:更新apt-get 在终端中输入以下命令,将Ubuntu的apt-get更新至最新版本: sudo apt-get update…

    其他 2023年3月28日
    00
  • 代理服务器CCProxy安装与图文设置方法

    下面是“代理服务器CCProxy安装与图文设置方法”的详细攻略。 安装 首先,你需要下载CCProxy的安装文件,可以从官网(http://www.youngzsoft.net/ccproxy/)下载。下载完成后,双击安装文件,按照提示进行安装,安装完成后,启动CCProxy。 配置 CCProxy 配置代理服务器 打开CCProxy,单击“选项”按钮,选择…

    other 2023年6月27日
    00
  • jQuery 实现自动填充邮箱功能(带下拉提示)

    jQuery 实现自动填充邮箱功能(带下拉提示)攻略 简介 自动填充邮箱功能是指在用户输入邮箱前缀时,通过下拉提示的方式提供常见的邮箱后缀选项,方便用户选择并自动填充完整的邮箱地址。这种功能在注册、登录等场景中常见,可以提高用户体验和减少输入错误。 实现步骤 步骤 1: 引入 jQuery 库 首先,确保你的页面中已经引入了 jQuery 库。你可以通过以下…

    other 2023年8月6日
    00
  • docker安装anaconda

    Docker安装Anaconda 第一步:安装Docker 在安装Anaconda之前,需要先安装Docker。安装Docker的过程比较简单,可以直接去Docker的官网(https://www.docker.com/)下载Docker CE版本,并按照官方文档进行安装。 第二步:创建一个新的Docker容器 在安装好Docker后,需要创建一个新的Doc…

    其他 2023年3月28日
    00
  • python简单生成随机姓名的方法示例

    Python简单生成随机姓名的方法示例 在Python中,可以使用随机数生成器来生成随机姓名。以下是一个简单的Python示例,演示如何生成机: “`pythonimport random first_names = [‘张’, ‘王’, ‘李’, ‘赵’, ‘钱’, ‘孙’, ‘周’, ‘吴’, ‘郑’,冯’, ‘陈’, ‘楚’, ‘卫’, ‘蒋’, ‘…

    other 2023年5月9日
    00
  • IP地址表示方法及网段子网掩码写法

    IP地址表示方法及网段子网掩码写法攻略 IP地址表示方法 IP地址是用于在互联网上唯一标识设备的一组数字。IPv4地址由32位二进制数组成,通常以点分十进制表示。IPv6地址由128位二进制数组成,通常以冒号分隔的十六进制表示。 IPv4地址表示方法 IPv4地址由四个8位二进制数组成,每个数值范围从0到255。例如,192.168.0.1是一个常见的IPv…

    other 2023年7月29日
    00
  • SpringBoot框架配置文件路径设置方式

    Spring Boot是一个非常流行的基于Spring框架的轻量级应用开发框架,其高度的可配置性是其优秀特性之一。同时,Spring Boot也支持多种方式设置配置文件的路径,方便开发人员进行项目开发。 配置文件路径 Spring Boot支持多种方式设定配置文件路径,包括以下几种: 使用启动参数:使用命令行参数-Dspring.config.locatio…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部