首页 > 其他分享 >详细讲解斐波那契数

详细讲解斐波那契数

时间:2023-09-07 17:33:51浏览次数:36  
标签:契数 数列 int 斐波 计算 讲解 那契

前置知识

斐波那契数列是一种经典的数学序列,它以递归的方式定义。斐波那契数列的前两个数是 0 和 1,之后的每个数都是前两个数之和。换句话说,数列中的每个数(从第三个数开始)都是前两个数之和。

斐波那契数列的数学表达式如下:

F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2)   (对于n ≥ 2)

根据上述定义,斐波那契数列的前几个数依次为:0, 1, 1, 2, 3, 5, 8, 13, 21, ...

下面介绍几种不同的计算斐波那契数列的方法:

  1. 递归方法:最直观的计算斐波那契数列的方法是使用递归。具体实现代码如下:
public static int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

这种方法简单易懂,但在计算较大的斐波那契数时会导致性能问题,因为它会重复计算相同的子问题。

  1. 迭代方法:为了避免重复计算,我们可以使用迭代的方式计算斐波那契数列。具体实现代码如下:
public static int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    
    int fib = 1;
    int prevFib = 1;
    
    for (int i = 2; i < n; i++) {
        int temp = fib;
        fib += prevFib;
        prevFib = temp;
    }
    
    return fib;
}

迭代方法通过从前往后计算每个斐波那契数,只需保存前两个数即可,避免了重复计算。

  1. 数组缓存方法:为了进一步提高效率,我们可以使用一个数组来缓存已经计算过的斐波那契数,从而避免重复计算。具体实现代码如下:
public static int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    
    int[] fibs = new int[n + 1];
    fibs[0] = 0;
    fibs[1] = 1;
    
    for (int i = 2; i <= n; i++) {
        fibs[i] = fibs[i - 1] + fibs[i - 2];
    }
    
    return fibs[n];
}

这种方法在计算较大的斐波那契数时效率更高,因为已经计算过的数不需要重复计算。

以上是几种常见的计算斐波那契数列的方法,它们各有优劣。对于较小的斐波那契数,递归方法可以直观地实现;对于较大的斐波那契数,建议使用迭代或数组缓存方法以提高效率。





例题

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n) 。

示例 1:

  • 输入:2
  • 输出:1
  • 解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

  • 输入:3
  • 输出:2
  • 解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

  • 输入:4
  • 输出:3
  • 解释:F(4) = F(3) + F(2) = 2 + 1 = 3

提示:

  • 0 <= n <= 30


采用动态规划

按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为10的时候,dp数组应该是如下的数列:

0 1 1 2 3 5 8 13 21 34 55


示例代码

class Solution {
public:
    int fib(int N) {
        if (N <= 1) return N;
        vector<int> dp(N + 1);
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i <= N; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[N];
    }
};




标签:契数,数列,int,斐波,计算,讲解,那契
From: https://blog.51cto.com/u_16246943/7399059

相关文章

  • 【算法】斐波那契数列与台风的故事
    在小岛的一个海滨小镇上,住着一个名叫苏菲的女孩。苏菲一家人靠海为生,她的生活简单而朴素,与大自然和谐共生。每天,苏菲都会来到海边,欣赏那美丽的日出和日落,感受着大海的呼吸。然而,小岛的美丽风光并非一成不变。每年夏季,热带气旋活跃,台风频繁登陆,给小岛带来了严重的危害。有一天,苏......
  • 权限框架之jcasbin讲解
    目录1jcasbin1.1前言1.2工作原理1.2.1PERM模型1.2.2Model语法1.2.2.1Request定义1.2.2.2Policy定义1.2.2.3Policyeffect定义1.2.2.4角色定义1.2.2.5匹配器1.2.2.6完整model.conf1.2.3policy.csv1.3准备1.3.1mavan依赖1.3.2配置文件1.2.3读取权限信息进行初始化1.......
  • 什么是 JMX?(Trino JMX 实战讲解)
    目录一、概述二、JMX原理三、实战操作(开启TrinoJMX)1)环境部署2)开启TrinoJMX1、配置config.properties2、配置jvm.config3、重新启动服务4、获取监控数据3)通过jconsole连接JMX4)常用的Trino指标接口和指标一、概述JMX是JavaManagementExtensions(Java管理扩展)的缩......
  • 通过c语言来实现斐波那契数列
    斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,像这样的:0、1、1、2、3、5、8、13、21、34、55......这个数列从第3项开始,每一项都等于前两项之和。以下通过c语言来实现这个程序#include<stdio.h>//1123581321345589intmain(){ /......
  • 【WCH蓝牙系列芯片】-基于CH582开发板—基础外设输出PWM波形讲解
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------在WCH官方提供的CH583的EVT资源包中,我们可以找到PWMX的例程,这是一个8位的PWM输出,占空比和周期可调的......
  • Keil5 MDK的详细讲解及与Keil 4的区别介绍
    引言:Keil5MDK(MicrocontrollerDevelopmentKit)是一款广泛应用于嵌入式系统开发的集成开发环境(IDE)。本文将详细讲解Keil5MDK的特点、功能和使用方法,并对比Keil4与Keil5MDK之间的区别,以帮助读者更好地了解Keil5MDK并选择适合自己的开发环境。一、Keil5MDK的特点:嵌入式开发支持:K......
  • Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)
    1前言在数据可视化的世界中,绘制清晰、易于理解的图表是非常关键的。Streamlit是一个流行的Python库,它提供了简单的界面和强大的功能,帮助用户轻松创建交互式应用程序和数据可视化。而其中的Chartelements(图表元素)部分则为我们提供了多种图表类型来展示数据。本文将深入介绍......
  • 【讲解】康托展开
    问题是这样的,给出一个\(1\simN\)全排列,求在所有\(1\simN\)全排列中的排名。如果暴力枚举\(1\simN\)每一个全排列,再\(O(N)\)判断是否符合,时间复杂度轻松爆炸,这时候便需要康托展开。首先把这个\(1\simN\)的全排列记为\(A\),他从左往右的第\(i\)位记为\(A_i\),问题......
  • JVM 与 GC 讲解
    目录一、概述二、JVM内存模型三、GC算法和回收器1)垃圾回收算法2)垃圾回收器四、垃圾回收机制(GC)1)分代垃圾回收机制2)G1垃圾回收器3)FullGC机制一、概述JVM(JavaVirtualMachine)是一种在计算机上运行Java字节码的虚拟机。它允许Java程序在不同的操作系统上具有跨平台的能力,因为......
  • 语音直播讲解软件
      直播本身就是需要借助运用人员实现带货的,如果商家觉得运营成本太高的话,就可以借助直播软件了,语音直播讲解软件可以让用户通过语音进行交互式的讲解,让学习更加高效、便捷。本文将介绍语音直播讲解软件的主要功能和特点。  一、文字识别技术  语音直播讲解软件的核心......