Skip to content

定义Definition

递推关系

施工中 · 内容逐步修订

Recurrence relation

用先前项规定序列当前项的关系。

形式陈述 ​

递推关系通过已经出现的项约束序列的后续项。一个固定阶数的显式形式是

an=F(n,an−1,…,an−k),n≥k.

必须同时说明索引范围、值域以及启动所需的初值 a0,…,ak−1。如果 F 在每次实际遇到的输入上都有唯一且仍在值域内的输出,就能逐项构造唯一的无限序列。

“递推关系”本身不包含初值,因而一般有许多解;关系与初值合在一起才是一个递归定义。固定长度窗口也不是所有递推的限制:例如 an 可以依赖 a⌊n/2⌋,或依赖全部 a0,…,an−1。关键是所用的更小问题有明确终点。

直觉

闭式告诉你如何直接从 n 找到 an,递推告诉你当前问题怎样从较小问题接起来。两者描述同一序列的不同方面:计数模型常先给出递推,增长分析则可能更需要闭式或上下界。

唯一性有一个很短的归纳证明。若两个解具有相同初值,并在 n 之前都相同,那么代入同一个单值函数 F 后,第 n 项也相同。逐步推进便排除了分叉。这个论证依赖“下一步确实有定义”,不是只写几个初始数字就自动成立。

例子与边界

从对象的末尾导出递推 ​

设 bn 为长度 n、不含相邻两个 1 的二进制串数。空串只有一个,所以 b0=1;长度一的串是 0,1,所以 b1=2。

对 n≥2,合法串按末位分两类。末位为 0 时,去掉它得到任意长度 n−1 的合法串;末位为 1 时,末两位必须是 01,去掉这两位得到任意长度 n−2 的合法串。两种删除都有唯一的逆操作,且两类不相交,因此

bn=bn−1+bn−2.

于是 b2=3,b3=5。长度三的五个串确为 000,001,010,100,101。这不是从几个数字猜公式,而是用末尾结构证明每个对象恰被数一次。

初值、值域与分支缺一不可 ​

Fibonacci 关系 Fn=Fn−1+Fn−2 配合 F0=0,F1=1 得到熟悉的序列;改用 F0=2,F1=1 会产生另一序列。相同递推并不意味着相同解。

关系 an2=an−1 不给出唯一的实数后继:从 a0=1 出发,第一步可选 1 或 −1,而选 −1 后再求下一实数项就失败。有限步可继续和可生成整个无限序列也要分清。

即使是显式形式,也可能遇到值域问题。an=1/an−1 在 a0=0 时第一步无定义;在整数值域中,a0=2 也无法继续。说明值域和分母条件是数学定义的一部分。

闭式如何核验 ​

若 an=an−1+2、a0=1,候选闭式为 an=2n+1。先检查 n=0,再检查 2n+1=(2(n−1)+1)+2。两个检查配合唯一性才证明所有项正确;仅核对前十项不能替代归纳论证。

推论与应用

线性递推是一类结构较强的递推,常系数齐次情形可用特征根或生成函数求解。含卷积的 Catalan 递推不是固定阶数线性递推,不能套同一特征方程。

算法中的递推既可以描述值,也可以描述成本。计算上面的 bn 时,朴素递归会在计算 bn−1 的过程中再次计算 bn−2;按索引递增保存前两项,就能用 O(n) 次加法得到结果。这改变计算过程,不改变序列,而且加法次数不等于大整数运算的位复杂度。分治成本中的 T(n)=2T(⌊n/2⌋)+O(n) 则是在估计增长,初始规模和取整约定仍然需要明确。

从组合问题建立递推时,最值得核对的是分解是否穷尽、各类是否互斥、删除操作是否可逆。前两项保证可以使用加法原理,最后一项保证较小对象数真的等于该类对象数。

参考资料
关系图谱20 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系