• C++
  • 洛谷题单【算法1-4】递推与递归题型分析及难度评价

  • @ 2025-5-26 22:09:22

洛谷题单【算法1-4】递推与递归题型分析及难度评价 https://www.luogu.com.cn/training/109#information

一、题型分类:递推题与递归题

1. 递推题(从初始条件出发逐步推导结果)
题号 题目名称 递推类型 难度星级(1-5) 核心考点
P1255 数楼梯 线性递推(斐波那契) ⭐☆☆☆☆ 基础递推入门,状态转移方程f(n)=f(n-1)+f(n-2),类似爬楼梯问题。
P1002 [NOIP] 过河卒 二维递推(矩阵DP) ⭐⭐☆☆☆ 棋盘路径计数,需处理障碍点,状态转移方程f(i,j)=f(i-1,j)+f(i,j-1)
P1044 [NOIP] 栈 卡特兰数递推 栈的出栈序列计数,直接套用卡特兰数公式C(2n,n)/(n+1),需理解组合数学推导。
P2437 蜜蜂路线 线性递推 ⭐☆☆☆☆ 蜂窝路径计数,状态转移f(n)=f(n-1)+f(n-2),类似斐波那契数列。
P1164 小A点菜 线性递推(背包) ⭐⭐☆☆☆ 0-1背包问题的变形,递推式f[j] += f[j-a[i]],求方案数而非最大值。
P1036 [NOIP] 选数 递归+递推(组合) 组合数递推求解,需预处理素数表,再用递归或递推统计选数组合。
P1990 覆盖墙壁 二维递推(状态压缩) ⭐⭐⭐☆☆ 用状态压缩表示墙壁覆盖状态,递推转移时考虑横/竖放置瓷砖的情况。
P1228 地毯填补问题 分治递推 棋盘覆盖问题,利用分治思想将大问题分解为小问题,递推填充地毯。
2. 递归题(将问题分解为子问题求解)
题号 题目名称 递归类型 难度星级(1-5) 核心考点
P1028 [NOIP] 数的计算 记忆化递归 ⭐☆☆☆☆ 递归计算满足条件的数的个数,状态转移f(n)=f(n)+f(k)(k≤n/2),需记忆化去重。
P1464 Function 递归+数学推导 ⭐⭐☆☆☆ 多层递归调用,按题意模拟函数F(a,b,c)的递归逻辑,注意终止条件。
P1928 外星密码 递归展开 递归解析嵌套的密码字符串,按规则展开重复部分,需处理多层嵌套。
P3612 [USACO] Secret Cow Code 递归定位 在递归生成的字符串中定位第k个字符,通过递归计算子串长度缩小搜索范围。
P1010 [NOIP] 幂次方 递归表示 将数表示为2的幂次方形式,递归分解数值,处理指数的递归输出(如2(2(2)+2+2^0))。
P1259 黑白棋子的移动 递归模拟 ⭐⭐⭐☆☆ 递归模拟棋子移动过程,寻找最少步数,需记录状态避免重复搜索。
P1498 南蛮图腾 递归绘制 递归生成分形图案,按层次绘制线条,考验递归逻辑的空间想象能力。

二、难度星级与核心特征总结

题号 题目名称 题型 难度 关键技巧
P1255 数楼梯 递推 普及− 一维线性递推,状态转移简单,适合递推入门。
P1002 过河卒 二维矩阵递推,处理障碍点的路径计数,需初始化边界条件。
P1044 卡特兰数的应用,需理解栈出栈序列与卡特兰数的关系,直接计算组合数。
P1028 数的计算 递归 记忆化递归减少重复计算,状态定义为f(n)表示n的合法数个数,递归式f(n)+=f(k)
P1464 Function 多层递归嵌套,按题目描述直接实现函数逻辑,注意参数范围和终止条件。
P1928 外星密码 普及/提高− 递归解析字符串中的重复模式(如A(3)BC展开为AAABC),处理嵌套括号。
P2437 蜜蜂路线 递推 普及− 蜂窝路径的递推计数,与斐波那契数列逻辑相同,注意起点和终点的索引转换。
P1164 小A点菜 递推(背包) 0-1背包求方案数,递推式f[j] += f[j-a[i]],初始化f[0]=1
P1990 覆盖墙壁 递推 普及/提高− 状态压缩递推,用二进制表示墙壁覆盖状态,转移时考虑横/竖瓷砖的放置方式。
P3612 Secret Cow Code 递归 普及− 递归生成字符串时不实际构造字符串,而是通过长度计算直接定位目标字符,优化效率。
P1498 南蛮图腾 普及/提高− 分形图形的递归绘制,每层图案由下层图案旋转、复制得到,需理解分形的递归结构。

三、学习建议

  1. 递推题入门顺序

    • 先练习线性递推(P1255数楼梯、P2437蜜蜂路线),掌握一维状态转移;
    • 再尝试二维递推(P1002过河卒)和背包递推(P1164小A点菜),理解状态维度扩展。
  2. 递归题核心要点

    • 递归的关键是定义子问题(如f(n)的含义)和终止条件(如n≤1时返回固定值);
    • 记忆化递归(如P1028数的计算)可避免重复计算,大幅提高效率;
    • 复杂递归题(如P1498南蛮图腾)需先画出前几层图案,找出递归规律。
  3. 递推与递归的转换

    • 递推是递归的迭代实现,通常效率更高(无栈开销);
    • 部分题目(如斐波那契数列)既可递推也可递归,建议优先用递推(如P1255)。
  4. 易错点提醒

    • 递推题注意初始化边界条件(如过河卒的障碍点f(i,j)=0);
    • 递归题注意栈溢出(如P1464的递归深度),必要时用记忆化或转换为递推;
    • 卡特兰数题(P1044)需注意数据范围,可能需要高精度计算。

如果需要某道题的具体递推式、递归逻辑或代码框架,可以进一步提问哦!

0 条评论

目前还没有评论...