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

GESP5级C++考试语法知识(十一、递归算法(一))

第一章什么是递归“套娃小精灵”的故事1、 想象一个魔法世界有一个小精灵它不会做复杂的事情但它有一个绝招遇到问题就把问题变成一个“更小的同样问题”然后再让自己去做这就是——递归2、 递归的本质 一个函数调用自己就像这样void f() { f(); // 自己调用自己 }⚠️ 但这样会无限循环所以必须有3、 递归三大要素1️⃣ 终止条件出口 不然就会无限调用爆炸2️⃣ 递归公式规律 大问题 小问题3️⃣ 缩小规模 每次问题都变小 第二章经典故事——爬楼梯1、 故事1小明要爬楼梯每次可以走1步或走2步2问爬到第 n 阶有多少种方法2、 思考过程1假设f(n) 表示到第 n 阶的方法数2 分情况到第 n 阶最后一步可能是从 n-1 走1步从 n-2 走2步3 所以f(n) f(n-1) f(n-2)3、 终止条件f(1) 1 f(2) 24、 C代码int f(int n) { if(n 1) return 1; if(n 2) return 2; return f(n-1) f(n-2); }5、 调用过程像树一样算 f(5)f(5) ├── f(4) │ ├── f(3) │ │ ├── f(2) │ │ └── f(1) │ └── f(2) └── f(3) ├── f(2) └── f(1)6、 会发现很多重复计算 第三章递归的时间复杂度1、 结论先记住对于上面的代码 时间复杂度是O(2^n)2、 为什么1因为 每次都会分成两条路像一棵“爆炸树”f(n) / \ f(n-1) f(n-2) / \ ...2 节点数量 ≈ 2^n3 小结一句话递归越分叉时间越慢 第四章递归的空间复杂度1、 空间来自哪里 来自函数调用栈2、 想象函数调用像叠盘子 f(5) ↓ f(4) ↓ f(3) ↓ f(2) ↓ f(1) 最深n 层3、 结论 空间复杂度O(n) 第五章递归的三大优化策略 优化1记忆化避免重复计算 思路 算过的结果存起来 C实现int dp[100]; int f(int n) { if(n 1) return 1; if(n 2) return 2; if(dp[n]) return dp[n]; return dp[n] f(n-1) f(n-2); } 效果 时间复杂度O(n) 从指数 → 线性 优化2改成循环递推 思路 既然是从小推大那就不用递归 代码int f(int n) { int a 1, b 2; for(int i 3; i n; i) { int c a b; a b; b c; } return b; } 优势不会爆栈更快更省空间 空间复杂度O(1) 优化3剪枝减少不必要计算 用在搜索问题DFS比如 找路径 走迷宫 思想 “这条路不可能成功就别走了” 示例void dfs(int step) { if(step 10) return; // 剪枝 // 继续搜索 } 第六章什么时候用递归 看到这些关键词可能想到递归树 二叉树、DFS分治归并排序回溯全排列搜索迷宫 最终总结 递归就像一个聪明的小精灵1️⃣ 不会做大问题 就把问题变小2️⃣ 一直变小 直到能解决3️⃣ 再把答案一点点拼回来 一句话记住递归“大问题 小问题 自己” 课后练习试试写1️⃣ 求 n 的阶乘2️⃣ 斐波那契数列3️⃣ 打印 1~n接下来我们继续学习递归的记忆化搜索 第一章为什么需要记忆化“健忘的小精灵”1、 故事还是那个递归小精灵 ‍♂️它很努力但有个大问题它每次都会忘记自己算过什么2、比如它在算f(5)结果它算了一次 f(3)又算了一次 f(3)又又算了一次 f(3)… 就像一个人写作业每题都重新推一遍3、 重复计算图f(5) ├── f(4) │ ├── f(3) │ │ ├── f(2) │ │ └── f(1) │ └── f(2) └── f(3) ├── f(2) └── f(1)f(3) 被算了很多次 第二章记忆化搜索的核心思想1、 一句话算过的结果存起来下次直接用2、 类比像这样‍ 小朋友做题第一次认真算 ✅第二次直接抄答案 第三章经典实例爬楼梯升级版1、 问题还是爬楼梯 每次走 1 或 2 步 求到第 n 阶的方法数2、❌ 普通递归慢int f(int n) { if(n 1) return 1; if(n 2) return 2; return f(n-1) f(n-2); }3、 时间复杂度O(2^n)爆炸 第四章加入记忆化核心1、 第一步准备一个“记忆本”int dp[100]; // 初始为0 dp[n] f(n)2、 第二步查询是否算过if(dp[n] ! 0) return dp[n];3、 第三步算完要存dp[n] f(n-1) f(n-2);4、 完整代码#include iostream using namespace std; int dp[100]; int f(int n) { if(n 1) return 1; if(n 2) return 2; if(dp[n] ! 0) return dp[n]; // 查表 dp[n] f(n-1) f(n-2); // 计算并存 return dp[n]; } int main() { cout f(10) endl; } 第五章复杂度变化超级重要1、 没有记忆化 每个状态重复计算 时间复杂度O(2^n)2、 有记忆化 每个 n 只算一次 时间复杂度O(n) 直接从“爆炸级”变“线性级”3、 空间复杂度dp数组O(n)递归栈O(n) 总空间O(n) 第六章再来一个更强例子背包问题雏形1、 问题有 n 个物品每个物品可以选或不选 问有多少种选法2、 递归思路f(i) f(i-1) f(i-1) 选 or 不选3、❌ 问题 同样会重复计算4、 记忆化版本 C代码int dp[100]; int f(int n) { if(n 0) return 1; if(dp[n]) return dp[n]; return dp[n] f(n-1) f(n-1); }5、 本质 把“树形递归”压缩成“线性计算” 第七章记忆化搜索模板必须掌握 通用模板int dp[100]; // 初始化为0 int dfs(int x) { // 1️⃣ 终止条件 if(边界) return 值; // 2️⃣ 查缓存 if(dp[x] ! 0) return dp[x]; // 3️⃣ 递归计算 dp[x] dfs(子问题); // 4️⃣ 返回结果 return dp[x]; } 第八章什么时候用记忆化看到这些情况就用1、 特征✅ 有“重复子问题”✅ 是递归✅ 可以用数组存状态2、 常见题型斐波那契数列爬楼梯背包问题树形DPDFS 状态 第九章递归 vs 记忆化 vs 动态规划方法本质速度递归暴力慢记忆化递归 存储快DP迭代更快 关系记忆化搜索 自顶向下的动态规划 最终总结 记忆化搜索就是算过就记住下次直接用 一句话理解“递归 小本本 高级算法”

相关文章:

GESP5级C++考试语法知识(十一、递归算法(一))

🌟 第一章:什么是递归?(“套娃小精灵”的故事)1、🎯 想象一个魔法世界:有一个小精灵,它不会做复杂的事情,但它有一个绝招:👉 遇到问题&#xff0c…...

Qwen3-VL多模态检索系统:跨模态搜索部署实战案例

Qwen3-VL多模态检索系统:跨模态搜索部署实战案例 用图文对话技术构建智能搜索系统,让AI看懂图片内容并精准回答你的问题 1. 项目介绍与环境准备 Qwen3-VL是阿里最新开源的视觉-语言模型,可以说是目前最强大的多模态AI系统之一。这个模型不仅…...

vLLM-v0.17.1应用场景:跨境电商多语言商品描述生成系统

vLLM-v0.17.1应用场景:跨境电商多语言商品描述生成系统 1. 跨境电商面临的商品描述挑战 跨境电商企业每天需要为成千上万的商品生成多语言描述,传统人工编写方式面临三大痛点: 人力成本高:每个语种都需要专业翻译人员&#xff…...

超越传统RPA!用Magentic-UI实现人机协作式网页自动化(含工作流调试技巧)

超越传统RPA:Magentic-UI的人机协作革命与实战进阶 当传统RPA工具还在追求"全自动"的乌托邦时,微软开源的Magentic-UI已经开辟了一条更务实的道路——人机协同智能。这个基于多智能体架构的系统不是要取代人类,而是通过"可干预…...

Plausible Analytics:隐私友好型网站统计完全指南:Google Analytics替代方案

Plausible Analytics:隐私友好型网站统计完全指南:Google Analytics替代方案 背景 网站分析是网站运营优化的重要基础。Google Analytics 作为最广泛使用的网站分析工具,提供了强大的数据洞察能力。然而,GA 存在诸多问题&#x…...

Axure RP全版本界面本地化:从问题诊断到安全部署的完整指南

Axure RP全版本界面本地化:从问题诊断到安全部署的完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

OpenClaw可视化监控:Qwen3-32B任务执行实时看板搭建

OpenClaw可视化监控:Qwen3-32B任务执行实时看板搭建 1. 为什么需要可视化监控? 去年冬天的一个深夜,我被手机警报惊醒——团队的数据处理流程卡住了。登录服务器后发现,OpenClaw正在处理的某个长文本分析任务已经运行了6小时&am…...

记录下在Windows中如何远程将当前Windows部署成PVE

背景: 做这件事实属无奈,公司另外一个分支的一个服务器(目前是Windows)需要跑多个平台的服务,目前Windows Server上部署虚拟机,直接装VMware workstation性能实在是糟糕,迫不得已考虑远程(无显示器、无KVM)将Windows …...

GlitchTip:开源错误追踪平台完全指南:Sentry替代方案的完整教程

GlitchTip:开源错误追踪平台完全指南:Sentry替代方案的完整教程 背景 在应用开发和运维过程中,错误追踪是保障服务质量的关键环节。Sentry 作为业界领先的错误追踪服务,提供了强大的错误收集和分析能力,但其云服务版…...

Windows 10下Cesium Terrain Builder编译踩坑实录(VS2015+GDAL环境配置)

Windows 10下Cesium Terrain Builder编译实战指南(VS2015GDAL环境配置) 在三维GIS开发领域,Cesium Terrain Builder(CTB)作为生成量化网格地形瓦片的核心工具,其编译过程却常让开发者望而生畏。特别是在Win…...

智鼎在线测评通关秘籍:2024最新51job题库实战解析与避坑指南

智鼎在线测评通关秘籍:2024最新51job题库实战解析与避坑指南 在竞争激烈的求职市场中,智鼎在线测评已成为众多知名企业筛选人才的第一道门槛。据统计,2024年使用智鼎测评系统的企业数量同比增长35%,而通过率却不足40%。这份指南将…...

3分钟掌握Windows音频路由:让每个程序都有专属音频输出 [特殊字符]

3分钟掌握Windows音频路由:让每个程序都有专属音频输出 🎧 【免费下载链接】audio-router Routes audio from programs to different audio devices. 项目地址: https://gitcode.com/gh_mirrors/au/audio-router 你是否曾经遇到过这样的烦恼&…...

如何突破极域电子教室限制?3个高效学习工具推荐

如何突破极域电子教室限制?3个高效学习工具推荐 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中,极域电子教室作为常见的教学管理软件&…...

Python离线环境搭建全攻略:从虚拟机到生产服务器的完整迁移方案

Python离线环境搭建全攻略:从虚拟机到生产服务器的完整迁移方案 在金融、军工等对网络安全要求极高的行业,服务器通常运行在完全隔离的离线环境中。这种环境下,如何部署Python运行环境并确保所有依赖库正常工作,成为许多运维工程师…...

树莓派4B接口全解析:从HDMI到GPIO,新手必看的使用指南

树莓派4B接口全解析:从HDMI到GPIO的实战指南 第一次拿到树莓派4B时,那块巴掌大的电路板上密密麻麻的接口总让人望而生畏——哪个口接显示器?哪些针脚能控制LED?电源到底要多少伏?这些问题困扰过每个初学者。作为全球最…...

8086汇编实战:用ZF、PF、SF标志位调试你的第一个程序(附调试截图)

8086汇编实战:用ZF、PF、SF标志位调试你的第一个程序(附调试截图) 刚接触汇编语言时,很多人会被那些神秘的标志位搞得一头雾水。记得我第一次在调试器里看到ZF、PF、SF这些缩写时,完全不明白它们有什么用——直到我在实…...

AD7606模数转换器的FPGA驱动设计与实现(串行/并行双模式解析)

1. AD7606模数转换器核心特性解析 AD7606这颗16位模数转换芯片在工业现场堪称"数据捕手",我经手过的电力监控、振动分析项目中都能看到它的身影。与普通ADC不同,它最吸引工程师的特性是双模数据输出——就像高速公路的ETC和人工通道可以并行运…...

Java: 手动实现DeepSeek R1工具调用,基于ReAct与Spring AI的实践指南

1. DeepSeek R1工具调用的现状与挑战 DeepSeek R1作为当前热门的开源大模型,在实际应用中经常会遇到需要调用外部工具的场景。但很多开发者在使用过程中发现,当前版本的DeepSeek R1并不支持原生的工具调用功能。这意味着当我们想让模型执行诸如查询天气、…...

League-Toolkit:3个核心功能解决英雄联盟玩家的日常痛点

League-Toolkit:3个核心功能解决英雄联盟玩家的日常痛点 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联…...

Stable Diffusion炼丹指南:从Classifier Guidance到Classifier-Free Guidance,一文搞懂两种主流引导方式的区别与实战选择

Stable Diffusion条件生成实战:Classifier Guidance与Classifier-Free Guidance深度解析 在AIGC技术爆发的今天,Stable Diffusion等开源模型已成为内容创作的重要工具。但当你需要精确控制生成结果时——比如指定生成"穿红色连衣裙的亚洲女性"…...

从航拍影像到三维地形:OpenDroneMap实战指南与常见问题解答

从航拍影像到三维地形:OpenDroneMap实战指南与常见问题解答 【免费下载链接】ODM A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷 项目地址: https://gitcode.com/gh_mirrors/od…...

用 AI 生成视频?试试 Hailuo 视频生成 API!

在现代数字时代,视频内容的需求不断增长,而制作高质量视频的门槛也随之降低。今天,我想和大家分享一个强大的工具——Ace Data Cloud Hailuo 视频生成 API。这款 API 不仅支持文本转语音、多个声音切换和情感调整,还能为你提供清晰…...

3天刷完2026最新Java高频面试题(1000 道附答案解析)

2026年金三银四一半儿快要过去了,总结了上半年各类 Java 面试题,初中级和中高级都有,包括 Java 基础,JVM 知识面试题库,开源框架面试题库,操作系统面试题库,多线程面试题库,Tcp 面试…...

PP-DocLayoutV3快速调用:10行Python代码实现文档解析

PP-DocLayoutV3快速调用:10行Python代码实现文档解析 你是不是经常遇到一堆扫描的PDF或者图片文档,想快速提取里面的文字、表格和图片,却不知道从何下手?手动整理不仅费时费力,还容易出错。今天,我就来分享…...

逆向工程实战:从V8引擎角度破解JavaScript无限debugger(保姆级教程)

V8引擎深度解析:JavaScript调试机制与安全实践 在JavaScript开发领域,调试器(debugger)是开发者日常工作中不可或缺的工具。作为Chrome浏览器和Node.js的核心引擎,V8对debugger关键字的处理机制直接影响着开发者的调试体验。本文将深入探讨V8…...

3个技巧快速掌握LeagueAkari:英雄联盟智能辅助工具实战指南

3个技巧快速掌握LeagueAkari:英雄联盟智能辅助工具实战指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为BP阶…...

SAP-MM:公司间交易(STO)-跨公司销售

一、引言:当销售公司没有库存,怎么办? 假设这样一个场景:你所在的集团有两个法人实体——A 公司负责市场销售,与客户关系紧密,但本身不生产也不持有库存;B 公司是生产基地,拥有所有…...

langchain AI开发大模型翻译助手

我直接给你运行后的真实输出结果,并把为什么会这样输出讲得明明白白! 一、你的代码 最终输出结果 prompt: [SystemMessage(content你是一个翻译专家,擅长将 英文 语言翻译成 中文语言.), HumanMessage(contentI love Large Language Model.)] result: 我…...

LyricsX:让Mac音乐体验跃升的桌面歌词神器

LyricsX:让Mac音乐体验跃升的桌面歌词神器 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否也曾在Mac上听音乐时,因无法显示桌面歌词而感到遗…...

深度学习训练中loss震荡与不收敛的常见原因及实战调优策略

1. 为什么你的模型loss像过山车?先看懂这些典型症状 第一次打开TensorBoard看到自己的loss曲线像心电图一样上蹿下跳,那种感觉就像新手司机开车时方向盘失控。其实loss震荡和不收敛是深度学习中再常见不过的问题,但不同表现背后藏着完全不同的…...