尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[算法设计与分析-从入门到入土] 递归

[算法设计与分析-从入门到入土] 递归
📅 发布时间:2026/6/19 15:14:29

[算法设计与分析-从入门到入土] 递归

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

  • [算法设计与分析-从入门到入土] 递归
  • 递归recursion
  • 1.归纳法Induction
        • 以选择排序求解数组 `A[1...n]`为例
        • 全排列生成generating permutation
  • 2.分治法divide and conquer
  • 3.动态规划dynamic programming

递归recursion

递归技术存在三种特殊情况:

  1. 归纳法Induction:数学证明中的归纳思想
  2. 非重叠子问题Nonoverlapping:分治法(拆成p个子问题)
  3. 重叠子问题overlapping:动态规划(自底向上)(以空间换取时间)

1.归纳法Induction

核心思想:
对于参数为n的问题, 先假设 “参数小于n的子问题已解决”(归纳假设), 再将子问题扩展到参数为n的情况

以选择排序求解数组A[1...n]为例

归纳假设:假设长度为n-1的子数组A[1...n-1]已能成功排序

原问题转化:要解决长度为n的原数组排序,只需先在整个数组A[1...n]中找到最小值min,将其与数组第一个元素交换位置;此时原数组被拆分为“已确定有序的最小值min”和“待排序的子数组A[1...n-1]”
[ m i n , A [ 1... n − 1 ] ] \big[ min, A[1...n-1] \big][min,A[1...n−1]]
通过这一过程,原问题的规模从n缩小到n-1,最终可递推至规模为1(单个元素天然有序)的基准情况,完成整个排序

通过递推式计算比较次数:
C o m p a r e ( n ) = { 0 n = 1 ( n − 1 ) + C ( n − 1 ) n ≥ 2 = n ( n − 1 ) 2 \begin{align} Compare(n) &= \begin{cases} 0 & n=1 \\ (n-1) + C(n-1) & n \geq 2 \end{cases} \\ &= \frac{n(n-1)}{2} \end{align}Compare(n)​={0(n−1)+C(n−1)​n=1n≥2​=2n(n−1)​​​

全排列生成generating permutation

目的: 给定整数n nn,生成由数字1 , 2 , … , n 1,2,\dots,n1,2,…,n构成的所有排列

归纳假设:已能生成n − 1 n-1n−1个元素的所有排列

原问题转化: 将第n nn个元素插入到所有可能位置,从而生成n nn个元素的排列

  1. 固定数字 1 在首位,递归生成{ 2 , 3 , … , n } \{2,3,\dots,n\}{2,3,…,n}的所有排列;
  2. 固定数字 2 在首位,递归生成{ 1 , 3 , … , n } \{1,3,\dots,n\}{1,3,…,n}的所有排列;
  3. 依次类推,直到固定数字n nn在首位

时间复杂度:Θ ( n ∗ n ! ) \Theta(n*n!)Θ(n∗n!)
空间复杂度:Θ ( n ) \Theta(n)Θ(n)

递推式写成:
f ( n ) = { 0 n = 1 n f ( n − 1 ) + n n ≥ 2 f(n)= \begin{cases} 0 &n=1 \\ nf(n-1)+n & n \geq2 \end{cases}f(n)={0nf(n−1)+n​n=1n≥2​

令f ( n ) = n ! h ( n ) f(n)=n!h(n)f(n)=n!h(n),

则n ! h ( n ) = n ( n − 1 ) ! h ( n − 1 ) + n n!h(n)=n(n-1)!h(n-1)+nn!h(n)=n(n−1)!h(n−1)+n
则h ( n ) = h ( n − 1 ) + 1 ( n − 1 ) ! < e − 1 h(n)=h(n-1)+\frac{1}{(n-1)!}<e-1h(n)=h(n−1)+(n−1)!1​<e−1

->f ( n ) < n ! ( e − 1 ) f(n)<n!(e-1)f(n)<n!(e−1)

e.g. 对于集合{1, 2, 3, 4}:

1234,2134,3124,4123,

(1234), 1324, 1423,
(2134), 2314, 2413,
(3124), 3214, 3412,
(4123), 4213, 4312,

(1234), 1243
(2134), 2143
(3124), 3142
(4123), 4132
(1324), 1342,
(1423), 1432,
(2314), 2341,
(2413), 2431,
(3214), 3241,
(3412), 3421,
(4213), 4231,
(4312), 4321

->A 4 4 = 24 A_4^4=24A44​=24

2.分治法divide and conquer

  • 找到多数元素
  • 最小 / 最大值查找
  • 第 k 小元素查找

3.动态规划dynamic programming

  • 最长公共子序列问题LCS
  • 全对最短路径问题(All-Pairs Shortest Path)
  • 0/1背包问题Knapsack

相关新闻

  • 在 WebRTC 实时语音系统中,引入 FSM 不是优化,而是生存条件
  • springboot_ssm基于Spring技术的沃克健身房管理系统的设计与实现天津大学java论文
  • 可靠的NM500耐磨钢板推荐榜:NM450耐磨钢板、NM500耐磨钢板、NM550耐磨钢板、NM600耐磨钢板选择指南 - 优质品牌商家

最新新闻

  • 2026上海钻石回收7家机构对比测评 本土标杆机构推荐 - 薛定谔的梨花猫
  • Flutter PullToRefresh与NestedScrollView集成深度解析:解决复杂滚动场景的终极指南
  • 宁波各区黄金回收测评 鄞州/海曙/江北变现哪家不压价 - 逸程
  • 2026深圳三大商圈黄金回收实测,逸程验金标准统一靠谱 - 逸程
  • K2.5技术解析:动态稀疏注意力与原生多模态架构
  • 2026杭州黄金回收避坑|认准商圈备案认证门店,杜绝虚高引流、到店压价 - 薛定谔的梨花猫

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号