当前位置: 首页 > news >正文

《笔记》青蛙跳台阶——斐波那契数列

斐波那契数列

斐波那契数列(Fibonacci Sequence)是一个经典的数学数列,其特点是每一项都是前两项的和。数列的前两项通常定义为 0 和 1(或 1 和 1),后续每一项都是前两项的和。


斐波那契数列的定义

斐波那契数列的定义如下:

  • ( F(0) = 0 )
  • ( F(1) = 1 )
  • 对于 ( n >= 2 ),( F(n) = F(n-1) + F(n-2) )
    数列的前几项为:
    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

斐波那契数列的性质

在这里插入图片描述


斐波那契数列的应用

  1. 自然界中的斐波那契数列

    • 植物的叶子排列、花瓣数量、松果的鳞片等都与斐波那契数列有关。
    • 例如,向日葵的花瓣数量通常是斐波那契数列中的某个数。
  2. 计算机科学

    • 斐波那契数列常用于算法设计和动态规划问题。
    • 例如,青蛙跳台阶问题、爬楼梯问题等。
  3. 金融领域

    • 斐波那契数列在技术分析中用于预测股票价格的支撑位和阻力位。
  4. 艺术与设计

    • 黄金分割比例(与斐波那契数列相关)被广泛应用于建筑、绘画和设计中。

斐波那契数列的实现

以下是斐波那契数列的几种常见实现方式:

1. 递归实现

def fibonacci(n):if n == 0:return 0if n == 1:return 1return fibonacci(n - 1) + fibonacci(n - 2)

测试

print(fibonacci(10)) # 输出 55

  1. 动态规划实现

复制def fibonacci(n):if n == 0:return 0if n == 1:return 1dp = [0] * (n + 1)dp[0] = 0dp[1] = 1for i in range(2, n + 1):dp[i] = dp[i - 1] + dp[i - 2]return dp[n]

测试

print(fibonacci(10)) # 输出 55

优点:

时间复杂度为 O(n),空间复杂度为 O(n)。
  1. 优化空间复杂度的动态规划
def fibonacci(n):if n == 0:return 0if n == 1:return 1prev1 = 0  # F(n-2)prev2 = 1  # F(n-1)for i in range(2, n + 1):current = prev1 + prev2prev1 = prev2prev2 = currentreturn prev2

测试

print(fibonacci(10)) # 输出 55

优点:

时间复杂度为 O(n),空间复杂度为 O(1)。
  1. 矩阵快速幂实现
import numpy as npdef fibonacci(n):if n == 0:return 0def matrix_power(matrix, power):result = np.identity(2, dtype=object)while power > 0:if power % 2 == 1:result = np.dot(result, matrix)matrix = np.dot(matrix, matrix)power = power // 2return resultmatrix = np.array([[1, 1], [1, 0]], dtype=object)result_matrix = matrix_power(matrix, n - 1)return result_matrix[0][0]

测试

print(fibonacci(10)) # 输出 55

优点:

时间复杂度为 O(logn),适合计算大数的斐波那契数列。

总结

斐波那契数列是一个经典的数学问题,具有广泛的应用场景。通过递归、动态规划、矩阵快速幂等方法,可以高效地计算斐波那契数列的值。在实际应用中,动态规划和矩阵快速幂是最常用的方法。

相关文章:

《笔记》青蛙跳台阶——斐波那契数列

斐波那契数列 斐波那契数列(Fibonacci Sequence)是一个经典的数学数列,其特点是每一项都是前两项的和。数列的前两项通常定义为 0 和 1(或 1 和 1),后续每一项都是前两项的和。 斐波那契数列的定义 斐波那…...

SpringBoot3动态切换数据源

背景 随着公司业务战略的发展,相关的软件服务也逐步的向多元化转变,之前是单纯的拿项目,赚人工钱,现在开始向产品化\服务化转变。最近雷袭又接到一项新的挑战:了解SAAS模型,考虑怎么将公司的产品转换成多租…...

OSPF - 特殊区域

OSPF路由器需要同时维护域内路由、域间路由、外部路由信息数据库。当网络规模不断扩大时,LSDB规模也不断增长。如果某区域不需要为其他区域提供流量中转服务,那么该区域内的路由器就没有必要维护本区域外的链路状态数据库。  OSPF通过划分区域可以减少网…...

Linux 系统下磁盘相关指令:df、du、fdisk、lsblk

文章目录 I df、du、fdisk、lsblk指令df命令用于显示文件系统的磁盘空间使用情况du命令用于估算目录或文件的磁盘空间使用情况fdisk命令用于对磁盘进行分区操作lsblk指令查看设备信息II 应用du估算目录或文件的磁盘空间使用情况lsblk查看服务器上查看硬盘个数III 知识扩展磁盘阵…...

基于单片机的肺功能MVV简单测算

肺功能MVV一般是指肺部每分钟的最大通气量。 MVV本身是最大值的英文缩写,在临床上,肺功能MVV表示肺部每分钟最大通气量,用以衡量气道的通畅度,以及肺部和胸廓的弹性、呼吸肌的力量。 肺部每分钟的最大通气量的参考值男性与女性之…...

如何用Python编程实现自动整理XML发票文件

传统手工整理发票耗时费力且易出错,而 XML 格式发票因其结构化、标准化的特点,为实现发票的自动化整理与保存提供了可能。本文将详细探讨用python来编程实现对 XML 格式的发票进行自动整理。 一、XML 格式发票的特点 结构化数据:XML 格式发票…...

腾讯云AI代码助手编程挑战赛-百事一点通

作品简介 百事通问答是一款功能强大的智能问答工具。它依托海量知识储备,无论你是想了解生活窍门、学习难点,还是工作中的专业疑惑,只需输入问题,就能瞬间获得精准解答,以简洁易懂的方式呈现,随时随地为你…...

Spring学习笔记1

目录 1 什么是spring2 spring的优势3 IOC的概念和作用3.1 无参数构造函数的实例化方式3.2 使用工厂中的普通方法实例化对象 4 Bean4.1 Bean相关概念4.2 Bean对象的作用范围 5 DI5.1 构造函数注入5.2 set方法注入5.3 复杂类型数据注入5.4 基于注解的IOC5.4.1 包扫描5.4.2 Compon…...

LeetCode 2185. Counting Words With a Given Prefix

&#x1f517; https://leetcode.com/problems/counting-words-with-a-given-prefix 题目 给一个字符串数组&#xff0c;返回其中前缀为 pref 的个数 思路 模拟 代码 class Solution { public:int prefixCount(vector<string>& words, string pref) {int count…...

图漾相机基础操作

1.客户端概述 1.1 简介 PercipioViewer是图漾基于Percipio Camport SDK开发的一款看图软件&#xff0c;可实时预览相机输出的深度图、彩色图、IR红外图和点云图,并保存对应数据&#xff0c;还支持查看设备基础信息&#xff0c;在线修改gain、曝光等各种调节相机成像的参数功能…...

前端开发中页面优化的方法

前端页面优化是指通过改进网页的加载速度、提高用户体验和SEO优化等手段来优化页面性能的过程。以下是一些常见的前端页面优化方法&#xff1a; 压缩和合并文件&#xff1a;通过压缩CSS和JavaScript文件&#xff0c;并将多个文件合并成一个文件&#xff0c;减少网络传输和HTTP请…...

Qt QDockWidget详解以及例程

Qt QDockWidget详解以及例程 引言一、基本用法二、深入了解2.1 窗口功能相关2.2 停靠区域限制2.3 在主窗体布局 引言 QDockWidget类提供了一个可以停靠在QMainWindow内的小窗口 (理论上可以在QMainWindow中任意排列)&#xff0c;也可以作为QMainWindow上的顶级窗口浮动 (类似一…...

机器学习之贝叶斯分类器和混淆矩阵可视化

贝叶斯分类器 目录 贝叶斯分类器1 贝叶斯分类器1.1 概念1.2算法理解1.3 算法导入1.4 函数 2 混淆矩阵可视化2.1 概念2.2 理解2.3 函数导入2.4 函数及参数2.5 绘制函数 3 实际预测3.1 数据及理解3.2 代码测试 1 贝叶斯分类器 1.1 概念 贝叶斯分类器是基于贝叶斯定理构建的分类…...

关于大数据的基础知识(一)——定义特征结构要素

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;一&a…...

2025 GitCode 开发者冬日嘉年华:AI 与开源的深度交融之旅

在科技的浪潮中&#xff0c;AI 技术与开源探索的火花不断碰撞&#xff0c;催生出无限可能。2025 年 1 月 4 日&#xff0c;由 GitCode 联合 CSDN COC 城市开发者社区精心打造的开年首场开发者活动&#xff1a;冬日嘉年华在北京中关村 • 鼎好 DH3-A 座 22 层盛大举行&#xff0…...

【MyBatis-Plus 进阶功能】开发中常用场景剖析

MyBatis-Plus&#xff08;MP&#xff09;除了封装常见的 CRUD 操作&#xff0c;还提供了一些高级功能&#xff0c;进一步简化复杂场景下的开发工作。本文将逐一讲解 逻辑删除、自动填充、多表关联查询的原理与使用方式&#xff0c;让你快速掌握这些技巧&#xff01; 一、逻辑删…...

【C++/控制台】2048小游戏

源代码&#xff1a; #include <iostream> #include <windows.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h>// #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)…...

Linux 中 top 命令的使用与实例解读

目录 Linux 中 top 命令的使用与实例解读一、top 命令参数二、输出字段含义&#xff08;一&#xff09;系统信息&#xff08;二&#xff09;任务信息&#xff08;三&#xff09;CPU 信息&#xff08;四&#xff09;内存信息 三、实例解读系统信息任务信息CPU信息内存信息进程列…...

C++ STL 中的 `unordered_map` 和 `unordered_set` 总结

1. unordered_map unordered_map 是一个基于哈希表实现的容器&#xff0c;存储键值对&#xff08;key-value&#xff09;&#xff0c;每个键必须唯一&#xff0c;可以快速插入、删除、查找。 基本特性 存储结构&#xff1a;键值对 (key-value)。键唯一性&#xff1a;每个键在…...

机器学习基础-概率图模型

&#xff08;一阶&#xff09;马尔科夫模型的基本概念 状态、状态转换概率、初始概率 状态转移矩阵的基本概念 隐马尔可夫模型&#xff08;HMM&#xff09;的基本概念 条件随机场&#xff08;CRF&#xff09;的基本概念 实际应用中的马尔科夫性 自然语言处理&#xff1a; 在词性…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...