每天五分钟:leetcode动态规划-递归与递推_day2

0)先记住一句话(贯穿两种写法)

到第n阶的方法数:

  • 最后一步要么走 1 阶:从n-1

  • 要么走 2 阶:从n-2

所以永远是:

f(n) = f(n-1) + f(n-2)


1)递归版本(从“大问题”往下问“小问题”)

✅ 1.1 纯递归(不推荐:会爆炸慢)

想法:我想知道f(n),那就去问f(n-1)f(n-2)

def climbStairs(n): if n <= 2: return n return climbStairs(n-1) + climbStairs(n-2)

为什么慢?

因为它会“重复算同一个问题”:

比如算f(5)

f(5)=f(4)+f(3) f(4)=f(3)+f(2) f(3)=f(2)+f(1)

你看:f(3)f(2)被算了很多遍。

复杂度:接近O(2^n),n 稍大就非常慢。


✅ 1.2 递归 + 记忆化(推荐:递归也能很快)

核心:每个f(k)只算一次,算过就记下来,下次直接拿。

def climbStairs(n): memo = {} def dfs(k): if k <= 2: return k if k in memo: return memo[k] memo[k] = dfs(k-1) + dfs(k-2) return memo[k] return dfs(n)

复杂度O(n)
因为1...n每个值只算一次。


2)递推版本(从“小问题”一路推到“大问题”)

递推就是:我先知道最小的答案,然后一步步算到 n。

✅ 2.1 DP 数组版(最直观)

dp[i] 代表到 i 阶的方法数 从 i=3 推到 n

复杂度O(n)时间,O(n)空间。


✅ 2.2 空间优化版(你写的版本:最常用

观察转移方程:

dp[i]只依赖dp[i-1]dp[i-2]
所以没必要保存整个数组,只保留最近两个数就够了。

class Solution: def climbStairs(self, n: int) -> int: if n <= 2: return n a, b = 1, 2 # dp[1], dp[2] for _ in range(3, n + 1): a, b = b, a + b return b

复杂度O(n)时间,O(1)空间。

3)递归 vs 递推:一眼对比

写法思维方向是否重复计算时间复杂度空间复杂度
纯递归自顶向下(n→1)✅会大量重复O(2^n)O(n) 递归栈
递归+记忆化自顶向下(n→1)❌不重复O(n)O(n)
递推 DP 数组自底向上(1→n)❌不重复O(n)O(n)
递推 空间优化自底向上(1→n)❌不重复O(n)O(1)

4)一句话解释

  • 递归:像问路——“到第 n 阶怎么走?那我先问到 n-1 怎么走,再问到 n-2 怎么走。”

  • 递推:像建楼——“先把 1 阶、2 阶的答案写出来,然后一层层推上去。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1014947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java的安全生产考试座位签到智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产考试座位签到智慧管理系统主要功能模块包括会员管理、机构管理、考试安排管理、座位管理和理论签到管理。该系统采用SpringMVC开发框架&#xff0c;MySQL数据库&#xff0c;并结合JavaScript和ECharts.js实现数据可视化。普通员工负…

什么叫“结构表示”和“文本表示”不对齐?(Self)

在做 GNN 文本 / LLM 的服务推荐时&#xff0c;经常会看到一句话&#xff1a;“现有方法难以有效对齐结构表示与文本表示。”第一次看到这句话时&#xff0c;很容易误以为是向量数值范围不一样、尺度不同之类的数学问题。 但其实&#xff0c;这个理解是 不对的。一句话先说结论…

【大模型】-LangChain--RAG文档系统

文章目录1.完整代码2.结果展示3. RAG介绍1.完整代码 由于使用的是通义&#xff0c;所以代码改造了下&#xff0c;因为openAI需要钱 import streamlit as st import tempfile import osfrom langchain_classic.memory import ConversationBufferMemory from langchain_communi…

基于Java的安全生产视频监控智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产视频监控智慧管理系统旨在通过先进的技术手段&#xff0c;提升企业安全管理效率与水平。该系统摒弃了传统的单一摄像头监控模式&#xff0c;引入会员、设备及事件管理等多层次功能模块&#xff0c;提供全方位的安全保障服务。相比以…

昇腾CANN从单算子到融合优化实战

目录 1 摘要 2 技术原理 2.1 架构设计理念解析 2.2 核心算法实现 2.2.1 三级流水线设计原理 2.2.2 Tiling策略与数据重用 2.3 性能特性分析 2.3.1 理论性能模型 2.3.2 实测性能数据 3 实战部分 3.1 完整可运行代码示例 3.2 分步骤实现指南 步骤1&#xff1a;环境配…

基于DSP的移相全桥开关电源设计资料:TMS320F28034控制模式下的50kHz高效率电源...

基于DSP的移相全桥开关电源设计资料 拓扑结构:移相全桥 控制芯片:TMS320F28034 控制模式&#xff1a;恒压限流控制模式 开关频率:50kHz 可以实现MOS零电压开通(ZVS) 输入电压范围:24Vdc~26Vdc 输出满载功率:100W 输出电压范围:12Vdc~24Vdc 最大输出电流:4.2A 输出纹波:<20…

无刷直流电机双闭环仿真:稳定运行与制动工况下的调制探索

无刷直流电机稳定运行和制动工况双闭环仿真&#xff0c;PWM-ON-PWM,PWM-OFF-PWM调制方式。 图一为拓扑图&#xff0c;图二为调制方式&#xff0c;图三为转速和电磁转矩波形&#xff0c;图四和图五为三相电流和电磁转矩放大和整体图&#xff0c;换相区间电磁转矩幅值较小&#x…

当AI遇上电影工业:一个让“抽卡式“视频生成彻底翻篇的工程化实践

从剧本到成片,我们如何用关键帧驱动理念重构AI视频生产流程 写在前面的话 说实话,当我第一次看到市面上那些"输入一句话就能生成视频"的AI工具时,内心是激动的。但当我真正尝试用它们做点正经事——比如制作一个30秒的品牌宣传片——我就发现了问题:生成的视频就像开…

探索非线性电液伺服系统的模型自适应反步控制

非线性电液伺服系统模型自适应反步控制&#xff0c;考虑模型参数不确定性。pdf教程matlab/simulink源程序 s函数编写在自动化控制领域&#xff0c;非线性电液伺服系统一直是个热门研究对象。今天咱们就聊聊它基于模型自适应反步控制&#xff0c;并且考虑模型参数不确定性的实现…

基于Java的安全生产能源安全智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产能源安全智慧管理系统的设计与实现全面解析&#xff0c;系统功能模块涵盖应急预案管理、应急资源管理、应急演练管理等18个方面。相比传统选题&#xff0c;本项目具有显著优势&#xff1a;不仅创新性地引入了数据可视化组件ECharts…

当AI遇上A股:一个让机器读懂财经新闻的量化框架

"如果你能让机器理解新闻,它就能预测股价。"这听起来像科幻小说,但CSMD项目正在把这个想法变成现实。 一、缘起:股市预测为什么这么难? 周五下午三点,你盯着电脑屏幕上跳动的K线图,心里盘算着下周一该不该加仓。突然,手机推送了一条新闻:"某龙头企业获得重大技…

聊聊三相、五相电机的容错控制

三相、五相电机容错控制 三相电机断开一相容错控制&#xff1b; 五相电机断开一相、相邻两相容错控制在电机控制领域&#xff0c;容错控制可是个相当重要的课题。想象一下&#xff0c;电机在运行过程中突然某一相出了问题&#xff0c;如果没有有效的容错机制&#xff0c;那整个…

21、GNU 开发实用工具:函数、变量与调试技巧

GNU 开发实用工具:函数、变量与调试技巧 1. 关联数组与命名栈 在开发过程中,关联数组和命名栈是非常实用的数据结构。对于关联数组,可使用 defined 函数来测试键是否存在。 defined Arguments: 1: Name of associative array2: The key to test Returns: $(true) if …

基于Java的安全监管网络人员信息智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全监管网络人员信息智慧管理系统基于Java技术栈实现&#xff0c;主要针对传统选题进行创新升级。系统涵盖基础字典管理、执法人员档案管理、执法证件管理和镇域管理四大模块功能&#xff0c;并采用SpringMVC开发框架与MySQL数据库相结合的…

16、构建与GNU Make的常见问题及算术实现

构建与GNU Make的常见问题及算术实现 在软件开发过程中,构建系统的效率和功能对于项目的顺利推进至关重要。本文将探讨一些构建相关的常见问题,以及如何利用GNU Make实现算术功能,甚至构建一个简单的计算器。 处理器数量与构建加速 在小型构建任务中,处理器数量对构建速…

基于Java的安全生产职业危害智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ?安全生产职业危害智慧管理系统集成了多项功能模块&#xff0c;如职业病防控管理、安全培训管理等二十个子系统。与传统选题相比&#xff0c;该系统的创新性在于结合了最新的数据可视化技术和预警预防机制&#xff0c;能够实现全面的数据监控…

信捷XDM PLC三轴可编程运动控制:强大且灵活的工业利器

信捷xdm plc三轴可编程运动控制支持信捷XDM系列PLC 信捷TG765触摸屏 支持直线插补 &#xff0c;圆弧插补&#xff0c;延时&#xff0c;等待输入ON&#xff0c;等待输入OFF&#xff0c;执行输出ON&#xff0c;执行输出OFF。可视化加工轨迹&#xff0c;支持电子手轮&#xff0c;改…

降AI率就要牺牲文笔?WriterPro第一个不服!实测对比比原文写得还好,这文笔简直绝了

写过AI文章的朋友都有个痛点&#xff1a;为了躲避检测&#xff0c;用各种工具降重&#xff0c;结果改出来的东西前言不搭后语&#xff0c;满屏的“机翻味”。 难道“低AI率”和“好文笔”真的不可兼得吗&#xff1f; 今天&#xff0c;我们不谈虚的&#xff0c;直接上一篇关于《…

Numpy基础20问

1、什么是numpy&#xff1f;一言以蔽之&#xff0c;numpy是python中基于数组对象的科学计算库。提炼关键字&#xff0c;可以得出numpy以下三大特点&#xff1a;拥有n维数组对象;拥有广播功能&#xff08;后面讲到&#xff09;&#xff1b;拥有各种科学计算API&#xff0c;任你调…