递归定义
Abstract
递归定义(Recursive Definition)通过基础情形(basis case)和递归规则(recursive rule)来定义对象,是定义函数、集合、字符串、树等递归结构的标准方法。递归定义与数学归纳法互为对偶:归纳法用于证明,递归定义用于构造。
定义
递归定义函数
递归定义函数由两部分组成:
- 基础情形(Basis Case):直接给出函数在一个或多个初始参数处的值。
- 递归规则(Recursive Rule):用函数在较小参数处的值来表达函数在当前参数处的值。
例1:阶乘函数
例2:斐波那契数列
例3:Ackermann 函数(非原始递归函数的经典例子)
递归定义集合
递归定义集合由三部分组成:
- 基础情形(Basis Clause):指定某些初始元素属于该集合。
- 递归规则(Recursive Clause):若某些元素已在集合中,则可通过规则生成新元素。
- 闭包条款(Closure Clause):除了由基础情形和递归规则生成的元素外,集合中不包含其他元素。
例:合式公式的定义 设命题变元集合为 ,合式公式集合 定义如下:
- 基础情形:每个 是合式公式。
- 递归规则:若 和 是合式公式,则 、、、、 均为合式公式。
- 闭包条款:所有合式公式均由上述规则有限次应用生成。
例:字符串集合 设字母表 为有限非空集合, 定义如下:
- 基础情形:空串 。
- 递归规则:若 且 ,则 。
- 闭包条款: 仅含由上述规则生成的串。
递归定义字符串
字符串上的运算可通过递归定义:
字符串长度(设 ):
字符串连接(设 ):
递归与归纳的对偶关系
递归定义与数学归纳法之间存在深刻的对偶关系:
- 递归定义是构造性的:它告诉我们如何生成对象。
- 数学归纳法是验证性的:它告诉我们如何证明关于这些对象的命题。
对偶对应关系:
递归定义 数学归纳法 基础情形(给出初始值) 基础步骤(验证 成立) 递归规则(从已知构造新对象) 归纳步骤(从 推出 ) 这种对偶性意味着:每一个良定义的递归定义都对应一个可用的归纳证明策略,反之亦然。
核心性质
| 性质 | 说明 |
|---|---|
| 良定义性 | 递归定义必须保证对定义域中每个元素都有唯一确定的值;基础情形和递归规则必须覆盖所有情况且不产生矛盾 |
| 终止性 | 每次递归调用必须使参数”更小”(在良基序下严格递减),保证递归最终到达基础情形而终止 |
| 基础情形的必要性 | 缺少基础情形将导致定义不完整(如 无法确定 的值) |
| 递归深度的有限性 | 对任意输入,递归展开的层数是有限的,这是良定义性的直接推论 |
| 与归纳法的对偶性 | 递归定义用于构造对象,归纳法用于证明关于这些对象的性质,二者互为对偶 |
| 多重递归 | 递归规则中可以引用多个较小参数处的值(如斐波那契数列 ) |
| 嵌套递归 | 递归调用可以嵌套在另一个递归调用的参数中(如 Ackermann 函数 ) |
| 原始递归 vs. 一般递归 | 原始递归函数的递归调用参数严格小于当前参数;一般递归函数允许更复杂的嵌套(如 Ackermann 函数不是原始递归的) |
关系网络
graph LR A["递归定义"] --> B["数学归纳法"] A --> C["结构归纳"] A --> D["递归算法"] A --> E["序列与求和"] B -.->|"对偶关系"| A C -.->|"证明递归结构"| A D -.->|"实现递归定义"| A E -.->|"递归定义序列"| A
章节扩展
第5章 — 5.3节核心内容
递归定义是第5章”归纳与递归”的核心内容之一,出现在 Rosen 第8版 Section 5.3。本节要点包括:
- 递归定义函数:通过基础情形和递归规则定义函数,经典例子包括阶乘、斐波那契数列、Ackermann 函数。
- 递归定义集合:基础情形 + 递归规则 + 闭包条款的三段式结构,应用于合式公式、字符串集合等。
- 递归定义字符串与字符串运算:长度、连接、反转等运算的递归定义。
- 递归与归纳的对偶关系:理解递归定义(构造)与归纳法(证明)之间的深刻联系,为后续学习结构归纳奠定基础。
第8章:递推关系 — 8.1节内容
- 递推关系与递归定义的关系:递推关系(recurrence relation)是递归定义在序列上的特例。递归定义函数的一般形式 本身就是一个递推关系。具体而言:
- 递归定义提供了递推关系的初始条件(基础情形)和递推规则(递归规则),二者在结构上完全对应。
- 例如,斐波那契数列的递归定义 就是一个递推关系,其中前两项是初始条件,第三项是递推公式。
- 递推关系求解的目标是找到序列的封闭公式(closed formula),即不依赖前项的直接表达式。例如斐波那契数列的 Binet 公式。
- 数学归纳法在递推关系中的角色:验证所求得的封闭公式确实满足原始递推关系和初始条件(详见数学归纳法的8.2节扩展)。
第11章:树
树的结构天然适合递归定义和递归处理。一棵树的递归定义为:一棵树要么为空,要么由一个根节点和若干棵不相交的子树组成。
树的递归遍历:
- 前序遍历(preorder):访问根 → 递归遍历左子树 → 递归遍历右子树
- 中序遍历(inorder):递归遍历左子树 → 访问根 → 递归遍历右子树
- 后序遍历(postorder):递归遍历左子树 → 递归遍历右子树 → 访问根
这些遍历算法的递归结构直接反映了树的递归定义,是递归定义在实际算法中的经典应用。
第13章:计算建模
- 13.1 语言与文法:字符串和语言通过递归方式定义——字母表 上的字符串集合 由基础情形(空串 )和递归规则(若 且 ,则 )构成。文法(grammar)本身也是一种递归定义:产生式 递归地生成形如 的字符串。
- 13.4 语言识别:正则表达式通过递归方式定义——基础情形(、、单个符号)和递归规则(并、连接、Kleene 闭包 )。
补充
Info
历史与理论背景
- Dedekind(1888):在《Was sind und was sollen die Zahlen?》中首次系统性地使用递归定义来建立自然数理论,证明了递归定义定理(递归定理),表明递归定义的合理性依赖于自然数的皮亚诺公理。
- Peano(1889):皮亚诺公理体系为递归定义提供了形式化的基础,其中第五条公理(归纳公理)保证了递归定义的唯一性。
- McCarthy 91 函数:由 John McCarthy(1968)提出的一个著名递归函数: 该函数对所有 都返回 ,是一个展示嵌套递归与”反直觉”行为的经典例子。
参考来源:Rosen, Section 5.3 — Recursive Definitions and Structural Induction