斐波那契数列

article/2025/8/30 2:36:05

  斐波那契数列来源于兔子繁殖问题,所以也叫兔子序列。
在这里插入图片描述
  最开始我一直不能理解兔子问题怎么和斐波那契数列联系在一起的,然后画了这个图之后,就明白了。
  第一年有一对小兔子,一年后成年。成年的兔子又可以生出一对小兔子,如此循环往复,每年的兔子数就构成了一个斐波那契数列。
  斐波那契数列有很多马甲:

  • 爬楼梯问题,一次可以爬一级,也可以爬两级;
  • 用1个2 * 1个小矩形覆盖8个2*1的小矩形问题(剑指offer)。

  有四种解决方法:

1. 递归

  这是最简单,也是效率最差的一种:

    public long recursive(int n) {if (n <= 0) return 0;if (n == 1) return 1;return recursive(n - 1) + recursive(n - 2);}

   时间复杂度指数级,他的递归通项公式可以转换为一个齐次二阶常系数差分方程:
      设f(n)为参数为n时的时间复杂度,很明显:f(n)=f(n-1)+f(n-2) ,且f(0)=0; f(1)=1;
      特征方程为:x^2-x-1=0
      得 x=(1±√5)/2
      因而f(n)的通解为:
            在这里插入图片描述
      由f(0)=0; f(1)=1可解得c_1,c_2
      最终可得,时间复杂度为:
            在这里插入图片描述
   真是没想到,高数里的差分方程在这里用到了,说真的,我刚看到这里还挺惊喜的。

2. 数学公式法

   有了上述时间复杂度的分析,就可以直接套用最后得出的公式,直接利用给的n计算x,时间复杂度O(logn)。因为涉及到幂运算。

3. 动态规划

   利用动态规划的思想,利用递归分析问题,找到状态转移方程,然后从第一个状态开始迭代到最终状态。

这里的状态转移方程是:f(n) = f(n - 1) + f(n - 2)   (n > 2)
初始状态:f(0) = 0; f(1) = 1;

    public long addition(int n) {int[] result = {1, 2};if (n < 2) {return result[n];}long n1 = 0;long n2 = 1;long n3 = 0;for (int i = 2; i <= n; i++) {n3 = n1 + n2;n1 = n2;n2 = n3;}return n3;}

4. 矩阵乘法

在这里插入图片描述
   根据这个公式写代码算就完事了。

let matrix22_mul = (x, y) = >{[x[0][0] * y[0][0] + x[0][1] * y[1][0], x[0][0] * y[0][1] + x[0][1] * y[1][1],x[1][0] * y[0][0] + x[1][1] * y[1][0], x[1][0] * y[0][1] + x[1][1] * y[1][1]]
}
let matrix22_pow = (x, n) =>{var r = [[1,0],[0,1]];var v = x;while (n) {if (n % 2 == 1) {r = matrix22_mul(r, v);n -= 1;}v = matrix22_mul(v, v);n = n / 2;}return r;
}
let fibnacci = n => n <= 0 ? 0 : matrix22_mul([[0,1],[0,0]], matrix22_pow([[0,1],[1,1]], n - 1))[0][1];

   看到winter大神写的代码,待我理解理解后面转为java,再来修改。


http://chatgpt.dhexx.cn/article/N7O6aJKm.shtml

相关文章

深入浅出总结求解菲波那切数列的五种方法

文章目录 题目思路一: 递归思路二: 递归 剪枝 (递归的优化)思路三: 动态规划思路四: 迭代 (动态规划的优化)思路五: 矩阵运算 快速幂 题目 菲波那切数列 定义 a0 0, a1 1, a2 1, an an − 1 an − 2, 求 an 是多少? 思路一: 递归 由于每一项都遵循这个公式: an an −…

图解寻址方式

注: 学习自 唐朔飞《计算机组成原理》 图自 唐朔飞《计算机组成原理》PPT整合 寻址方式 一丶指令寻址 二丶数据寻址 堆栈寻址

寻址方式一

目录 立即数、寄存器、存储器的概念 数据寻址方式 立即寻址&#xff1a; 寄存器寻址&#xff1a; 存储器寻址: 注意&#xff1a; 立即数、寄存器、存储器的概念 立即数&#xff1a;参与操作的数据本身&#xff0c;8位或16位 &#xff08;只能作为src,无法成为dst&#xf…

计算机寻址方式

一、指令寻址 1.两种方式 顺序寻址 每次寻址后 PC自动 1 &#xff1b; 跳跃寻址 当跳转到 JUP 指令时 其后的为立即数指令 &#xff0c;便跳转到对应的指令数。 数据寻址 立即寻址特征 地址村的为立即数特征 直接寻址特征 形式地址为&#xff1a; 操作数的真实地址 隐含寻…

指令格式与寻址方式

指令与指令系统 指令: 控制计算机完成某种操作的命令。 指令系统&#xff1a; 处理器所能识别的所有指令的集合。 指令的兼容性&#xff1a; 同一系列机的指令都是兼容的。 汇编语言&#xff1a; 指令助记符。 指令格式 例如&#xff1a; 寻址方式 操作数可能的来源或…

寻址方式介绍

根据指令内容确定操作数地址的过程称为寻址。完善的寻址方式可为用户组织和使用数据提供方便。 ①直接寻址&#xff1a;指令地址域中表示的是操作数地址。 ②间接寻址&#xff1a;指令地址域中表示的是操作数地址的地址即指令地址码对应的存储单元所给出的是地址A&#xff0c…

8086寻址方式

8086寻址方式 寻址方式总共有两大类: 按数据寻址 按地址寻址 1.数据寻址方式 MOV DST,SRC和数据有关的寻址方式 1.立即寻址: 操作数直接在源操作数中给出 MOV AL,45H 源操作数在指令中给出,立即数只能是源操作数 立即数的长度和DST长度一致 2.寄存器寻址 操作数放在指定的寄存…

数据寻址方式

以下例子中的寻址方式说的都是源操作数&#xff0c;因为目的操作数都用的是寄存器寻址&#xff0c;不再讨论 1.立即寻址 立即寻址是指令直接给出立即数本身作为操作数&#xff0c;立即数作为指令的一部分跟指令一起存在于代码段中&#xff0c;会被指令预取队列直接取到CPU中进…

IPv6 寻址方式简介

在计算机网络中&#xff0c;寻址模式是指在网络上托管地址的机制。IPv6 提供了多种类型的模式&#xff0c;可以通过这些模式对单个主机进行寻址。也可以同时对多个主机进行寻址或者寻址最近距离的主机。 单播寻址 在单播寻址方式中&#xff0c;IPv6 接口&#xff08;主机&…

七种寻址方式(立即寻址、寄存器寻址)

七种寻址方式(立即寻址、寄存器寻址) 一、立即寻址方式 操作数作为指令的一部分而直接写在指令中&#xff0c;这种操作数称为立即数&#xff0c;这种寻址方式也就称为立即数寻址方式。 立即数可以是8位、16位或32位&#xff0c;该数值紧跟在操作码之后。如果立即数为16位或32位…

8086寻址方式图解

目录 1&#xff1a;立即寻址 2&#xff1a;寄存器寻址 3&#xff1a;直接寻址&#xff08;存储器直接寻址&#xff09; 4&#xff1a;寄存器间接寻址&#xff08;重点&#xff09; 5&#xff1a;基址寻址&#xff08;相对寻址&#xff09; 6&#xff1a;变址寻址 &#x…

七种寻址方式

七种寻址方式&#xff08;从该处学习转载&#xff0c;感谢&#xff0c;如有侵犯&#xff0c;请联系删除&#xff09; 立即寻址 操作数作为指令的一部分而直接写在指令中&#xff0c;这种操作数称为立即数&#xff0c;这种寻址方式也就称为立即数寻址方式。 立即数寻址方式通…

十种寻址方式

寻址方式 寻址方式分为指令寻址和数据寻址。 目录 寻址方式 一、指令寻址 二、数据寻址 1.立即寻址 2.直接寻址 3.隐含寻址 4.间接寻址 5.寄存器&#xff08;直接&#xff09;寻址 6.寄存器间接寻址 7.基址寻址 8.变址寻址 9、相对寻址 10、堆栈寻址 一、指令寻…

常用的图像特征提取方法

1. 灰度特征可提取&#xff1a;灰度平均值、方差 2.纹理特征提取 MATLAB程序&#xff1a; %%%特征提取 clear all; close all; clc;Ddir(E:\my_work\长光所\云图\数据集\云样本\*.jpg); cloud_featurezeros(length(D),5);for i1:length(D)imgimread([E:\my_work\长光所\云图\…

OpenCV图像特征提取

Camera系列文章 传感器融合是将多个传感器采集的数据进行融合处理&#xff0c;以更好感知周围环境&#xff1b;这里首先介绍Camera的相关内容&#xff0c;包括摄像头及图像知识基本介绍&#xff0c;OpenCV图像识别&#xff08;特征提取&#xff0c;目标分类等&#xff09;&…

(八)特征选择与特征提取

特征选择与特征提取 一、特征的选择 1、原始特征 在描述对象的时候 模式识别中把每个对象都量化为一组特征来描述&#xff0c;构建特征空间是解决模式识别问题的第一步&#xff0c;其中通过直接测量得到的特征称为原始特征。 如&#xff1a; - 人体的各种生理指标&#xff0…

机器学习之特征提取

机器学习之特征提取 1.为什么要特征提取 原始数据常常是高维的&#xff0c;其中包含了许多冗余信息或者十分稀疏或者计算量大&#xff0c;拿原始数据来训练可行&#xff0c;但是往往直接训练是低效的。所以特征提取往往是必要的。 注&#xff1a;特征提取主要是为了解决下面三…

【机器学习】特征提取

特征提取 目标 应用DictVectorizer实现对类别特征进行数值化、离散化 应用CountVectorizer实现对文本特征进行数值化 应用TfidfVectorizer实现对文本特征进行数值化 说出两种文本特征提取的方式区别 定义 特征提取是将任意数据&#xff08;如文本或图像&#xff09;转换…

特征选择与特征抽取

特征抽取和特征选择是DimensionalityReduction&#xff08;降维&#xff09;两种方法&#xff0c;但是这两个有相同点&#xff0c;也有不同点之处&#xff1a; 1. 概念&#xff1a; 特征抽取&#xff08;Feature Extraction&#xff09;:Creatting a subset of new features by…

【特征提取】基于深度学习的特征提取和匹配方法介绍

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达本文转自 | AI深度学习视线精彩内容 计算机视觉需要图像预处理&#xff0c;比如特征提取&#xff0c;包括特征点&#xff0c;边缘和轮廓之类。以前做跟踪和3-D重建&#…