相关笔记: 5.2 强归纳与良序性 | 5.4 递归算法
概览
本节系统介绍了递归定义(Recursive Definition)和结构归纳(Structural Induction)两种核心技术。递归定义通过基础步指定初始元素、递归步给出构造规则来定义函数、集合和结构;结构归纳则是针对递归定义对象的专用证明方法。本节内容是递归思想的基石,为后续5.4 递归算法和第8章递归关系提供理论支撑。
- 递归定义函数:基础步指定 ,递归步用 在较小整数上的值定义
- 递归定义集合:基础步给出初始元素,递归步给出从已有元素构造新元素的规则
- 递归定义结构:根树、扩展二叉树、满二叉树的递归构造
- 结构归纳法:基础步验证初始元素,递归步证明”若对构造元素成立,则对新元素也成立”
- 广义归纳:将归纳法推广到具有良序性的其他集合(如 的字典序)
- 重要定理:Lame定理——欧几里得算法的除法次数不超过 的十进制位数的5倍
一、知识结构总览
graph TB A["5.3 递归定义与结构归纳<br/>Recursive Definitions & Structural Induction"] --> B["递归定义函数"] A --> C["递归定义集合"] A --> D["递归定义结构"] A --> E["结构归纳法"] A --> F["广义归纳"] B --> B1["基础步 + 递归步"] B --> B2["阶乘函数"] B --> B3["幂函数 a^n"] B --> B4["斐波那契数列"] B --> B5["求和函数"] B --> B6["Lame定理"] C --> C1["字符串集 Σ*"] C --> C2["字符串拼接"] C --> C3["字符串长度"] C --> C4["合式公式 WFF"] C --> C5["正整数集"] D --> D1["根树 Rooted Tree"] D --> D2["扩展二叉树<br/>Extended Binary Tree"] D --> D3["满二叉树<br/>Full Binary Tree"] D --> D4["树的高度与顶点数"] E --> E1["基础步:验证初始元素"] E --> E2["递归步:构造传递性"] E --> E3["合式公式性质证明"] E --> E4["字符串性质证明"] E --> E5["二叉树性质证明"] F --> F1["字典序 Lexicographic Order"] F --> F2["N×N 上的归纳"] F --> F3["双变量递归定义"]
二、核心思想
核心思想
本节的核心思想是自引用定义与对应证明方法。递归定义的本质是”用对象自身来定义对象”——通过指定最简单情况(基础步)和从简单到复杂的构造规则(递归步),可以精确定义函数、集合和结构。与之对应,结构归纳是专门为递归定义对象设计的证明技术:在基础步中验证最简单情况,在递归步中证明”如果性质对所有用于构造新对象的旧对象成立,则对新对象也成立”。这种”定义-证明”的对称性是离散数学中递归思想的精髓。
1. 递归定义函数
递归定义函数(Recursively Defined Functions)
要定义一个以非负整数集为定义域的函数 ,需要两个步骤:
基础步(Basis Step):指定函数在 处的值 。
递归步(Recursive Step):给出从函数在较小整数处的值求函数在更大整数处值的规则。
- 这种定义也称为归纳定义(Inductive Definition)
- 递归定义的函数是良定义的(well-defined):每个正整数处的值被唯一确定
- 良定义性由5.1 数学归纳法保证
递归定义示例
设 由以下递归定义:
计算前几项:
幂函数的递归定义
设 是非零实数, 是非负整数,则 的递归定义为:
基础步:
递归步:,对
求和函数的递归定义
斐波那契数列(Fibonacci Sequence)
斐波那契数的下界估计
对所有 ,,其中 (黄金比例)。
证明(5.2 强归纳与良序性):设 为""。
基础步:
- : ✓
- : ✓
归纳步:假设对所有 (), 为真。需证 。
因为 是 的根,所以 。因此:
由归纳假设( 保证 ):
因此:
为真。
Lame定理(Theorem 1)
设 和 是正整数且 。则欧几里得算法求 所用的除法次数不超过 的十进制位数的5倍。
证明思路:设欧几里得算法使用了 次除法,产生余数序列 。可以证明 ,,,,。
由上面的下界估计,,因此 。取对数得 。若 有 位十进制数,则 ,故 。
2. 递归定义集合
递归定义集合(Recursively Defined Sets)
递归定义集合包含三个部分:
基础步(Basis Step):指定一组初始元素属于集合。
递归步(Recursive Step):给出从已有元素构造新元素的规则。
排斥规则(Exclusion Rule):集合仅包含基础步指定的元素和递归步生成的元素,不包含其他元素。(通常隐含假设,不需显式声明。)
3的倍数集合
定义子集 :
- 基础步:
- 递归步:若 且 ,则
生成过程:
可以证明 恰好是所有正的3的倍数构成的集合。
字符串集 (Definition 1)
字母表 上所有字符串的集合 递归定义为:
基础步:( 是空字符串)
递归步:若 且 ,则
- 每次应用递归步,生成一个多一个符号的字符串
- 当 时, 是所有二进制字符串的集合
字符串拼接(Definition 2)
设 是字母表, 是其上的字符串集。拼接运算 递归定义为:
基础步:若 ,则
递归步:若 且 ,则
- 拼接通常简写为 而非
- 例如:
字符串长度(Example 7)
字符串 的长度 递归定义为:
命题逻辑的合式公式(Example 8)
涉及 、命题变量和运算符 的合式公式(WFF)递归定义为:
基础步:、 和命题变量 是合式公式。
递归步:若 和 是合式公式,则 、、、、 也是合式公式。
- 例如:、、 是合式公式
- 、、 不是合式公式
运算符与运算对象的合式公式(Example 9)
由变量、数字和运算符 (其中 表示乘法, 表示指数)组成的合式公式递归定义为:
基础步:若 是数字或变量,则 是合式公式。
递归步:若 和 是合式公式,则 、、、、 也是合式公式。
- 例如:、、、 是合式公式
- 、、 不是合式公式
3. 递归定义结构——树
根树(Definition 3)
根树的集合递归定义为:
基础步:单个顶点 是一棵根树( 为根)。
递归步:设 是不相交的根树,根分别为 。添加一个新根 (不在任何 中),并从 到每个 添加一条边,构成新的根树。
- 每次应用递归步,产生无穷多棵新树
- 根树是图论中的重要概念(详见第10-11章)
扩展二叉树(Definition 4)
扩展二叉树的集合递归定义为:
基础步:空集 是一棵扩展二叉树。
递归步:若 和 是不相交的扩展二叉树,则 也是扩展二叉树,其中 由一个根 、连接 到 根的边(若 非空)和连接 到 根的边(若 非空)组成。
- 扩展二叉树中,左子树或右子树可以为空
满二叉树(Definition 5)
满二叉树的集合递归定义为:
基础步:仅含一个顶点 的树是满二叉树。
递归步:若 和 是不相交的满二叉树,则 也是满二叉树,由根 及连接 到 根和 根的边组成。
- 满二叉树与扩展二叉树的区别在于基础步:满二叉树的基础步是一个顶点而非空集
- 满二叉树的左右子树都不能为空
满二叉树的高度与顶点数(Definition 6)
满二叉树 的高度 递归定义为:
满二叉树 的顶点数 递归定义为:
4. 结构归纳法
结构归纳法(Structural Induction)
要证明递归定义集合中的所有元素都具有某个性质,需要两个步骤:
基础步(Basis Step):证明该性质对递归定义基础步中指定的所有元素成立。
递归步(Recursive Step):证明若该性质对递归步中用于构造新元素的每个元素都成立,则对新构造出的元素也成立。
- 结构归纳的有效性由5.1 数学归纳法保证
- 设 为”对经 次或更少次递归步生成的所有元素,性质成立”
- 基础步证明 ,递归步证明 ,由数学归纳法得 对所有 成立
合式公式的括号配对(Example 11)
证明:每个合式公式(按 Example 8 定义)中左括号和右括号的数量相等。
证明(结构归纳):
基础步:、 和命题变量 不含括号,左括号数 右括号数 。✓
递归步:假设 和 是合式公式,各有相等数量的左右括号(,)。需证 、、、、 也各有相等的左右括号。
- :左括号 ,右括号 。因 ,故相等。
- :左括号 ,右括号 。因 且 ,故相等。
- 其余三种情况同理。
字符串长度的可加性(Example 12)
证明:对所有 ,。
证明(结构归纳,对 归纳):
设 为” 对所有 成立”。
基础步:——。✓
递归步:假设 为真。需证对任意 , 为真,即 。
由字符串长度的递归定义:
由归纳假设 ,因此:
为真。
满二叉树的顶点数上界(Theorem 2)
若 是满二叉树,则 。
证明(结构归纳):
基础步:仅含根 的树,,。。✓
递归步:假设 且 。由递归公式:
最后一步使用了 。
5. 广义归纳(Generalized Induction)
广义归纳
数学归纳法可以推广到任何具有良序性的集合,不仅限于非负整数集。
例如,在 (非负整数有序对)上定义字典序(Lexicographic Ordering):
在字典序下具有良序性,因此可以对双变量递归定义使用广义归纳。
双变量递归定义的证明(Example 13)
设 对 递归定义为:
证明: 对所有 成立。
证明(广义归纳):
基础步: 时,。✓
归纳步:假设公式对所有字典序小于 的 成立。
- 若 且 :。由归纳假设 ,故 。✓
- 若 :。由归纳假设 ,故 。✓
三、补充理解与易混淆点
补充理解
补充1:递归定义与显式定义的关系
递归定义和显式(封闭形式)定义是描述同一对象的两种不同方式:
- 显式定义直接给出 的计算公式,如
- 递归定义通过自引用关系定义,如 ,
两者等价但各有优势:
- 显式定义便于直接计算任意 的值
- 递归定义更自然地反映对象的构造过程,便于用归纳法证明性质
从递归定义求显式定义的过程称为求解递推关系,这是第8章的核心内容。常见方法包括:
- 迭代法(反复展开递归式)
- 特征方程法(对线性齐次递推关系)
- 生成函数法
例如,, 的显式解为 (可通过迭代或特征方程求得)。
- Recursive vs Explicit Definitions — Khan Academy 递归与迭代对比 来源:Rosen, K. H. (2019). Discrete Mathematics and Its Applications (8th ed.), McGraw-Hill, Section 5.3. 来源:Cormen, T. H., et al. (2009). Introduction to Algorithms (3rd ed.), MIT Press, Chapter 4.
补充2:结构归纳与强归纳的联系与区别
结构归纳和5.2 强归纳与良序性有密切联系但适用场景不同:
特征 强归纳 结构归纳 适用对象 关于整数的命题 关于递归定义集合的命题 基础步 验证 (或多个起始值) 验证基础步中的所有初始元素 归纳步 若性质对构造元素成立,则对新元素成立 理论基础 良序性 数学归纳法(通过”生成步数”转化) 结构归纳的有效性证明:设 为”对经 次递归步生成的所有元素性质成立”。结构归纳的基础步证明 ,递归步证明 ,由数学归纳法得证。
在实践中,结构归纳更”自然”——不需要将证明对象映射到整数,直接在对象的结构上进行归纳。
- Structural Induction Explained — 结构归纳法视频讲解 来源:Mitchell, J. C. (1996). Foundations for Programming Languages. MIT Press, Chapter 2. 来源:Rosen, K. H. (2019). Discrete Mathematics and Its Applications (8th ed.), McGraw-Hill, Section 5.3.
易混淆点
误区:递归定义的函数不需要基础步
- ❌ 认为递归步已经包含了所有信息,基础步可有可无
- ✅ 没有基础步的递归定义是不完整的,无法确定函数值
- ❌ 认为基础步只需要指定
- ✅ 当递归步依赖于多个前驱值时(如斐波那契 ),基础步需要指定多个起始值( 和 )
例如,仅给出 而不指定 和 ,则 可以是任意等差数列(如 对任意常数 都满足该递推关系)。
- ⚠️ 判断基础步需要多少个起始值的方法:看递归步中引用的最远前驱。 引用了 ,因此需要 和 两个起始值。
误区:结构归纳的递归步等同于"假设对所有元素成立"
- ❌ 认为结构归纳的递归步可以假设”性质对集合中所有元素成立”
- ✅ 结构归纳的递归步只假设”性质对用于构造新元素的那些元素成立”
- ❌ 混淆结构归纳的递归步与强归纳的归纳步
关键区别:结构归纳的递归步是局部的——只关注一次构造操作涉及的元素。例如证明合式公式的性质时,递归步假设 和 具有该性质,然后证明 也具有该性质。这里只涉及 、 和 三个对象,不需要假设所有合式公式都具有该性质。
这种局部性正是结构归纳的优势——证明更简洁,不需要处理全局假设带来的复杂性。
四、习题精选
习题概览
题号范围 核心考点 难度 1-4 递归定义函数的求值 ⭐ 5-6 判断递归定义是否良定义 ⭐⭐ 7-11 给出序列/函数的递归定义 ⭐⭐ 12-19 斐波那契数列性质证明 ⭐⭐⭐ 20-21 max/min 函数的递归定义与性质 ⭐⭐ 22-31 递归定义集合(奇偶数、模运算、有序对) ⭐⭐⭐ 32-44 字符串性质证明(结构归纳) ⭐⭐⭐ 45-46 二叉树性质证明(结构归纳) ⭐⭐⭐ 47-49 广义归纳(双变量递归) ⭐⭐⭐⭐ 50-58 Ackermann函数 ⭐⭐⭐⭐
题1:递归定义函数求值
题目
设 由 和 递归定义。求 。
解答
题2:判断递归定义的良定义性
题目
判断以下递归定义是否良定义。如果是,求 的显式公式并证明。
(a) ,,
(b) ,,,
解答
(a) 不良定义。,但 未被定义(定义域是非负整数)。
(b) 良定义。计算前几项:
- ,
- ,
- ,
规律:( 为偶数),( 为奇数)。
统一公式:。
证明(对 的数学归纳):
- : ✓
- : ✓
- 假设 对 成立。。因为 (分奇偶讨论即可),故 。
题3:斐波那契数列性质证明
题目
证明:,其中 是第 个斐波那契数。
解答
设 为""。
基础步::。✓
归纳步(普通归纳):假设 为真,即 。需证:
最后一步使用了 。
题4:字符串性质的结构归纳证明
题目
(a) 给出函数 的递归定义, 计算二进制字符串 中 的个数。
(b) 用结构归纳证明 。
解答
(a) 递归定义:
其中 。
(b) 设 为” 对所有 成立”。
基础步:——。✓
递归步:假设 为真。需证 和 。
- :。✓
- :。✓
题5:满二叉树叶子数与内部顶点数的关系
题目
用结构归纳证明:满二叉树 的叶子数 比内部顶点数 多1,即 。
(叶子数和内部顶点数的递归定义:基础步——根 既是叶子也没有内部顶点,即 ,。递归步—— 的叶子集是 和 叶子集的并集,内部顶点集是 与 、 内部顶点集的并集。)
解答
证明(结构归纳):
基础步:仅含根 的满二叉树,,。。✓
递归步:假设 且 。对 :
因此 。
解题思路提示
递归定义与结构归纳的解题方法论:
- 递归定义函数:基础步指定最小输入的值,递归步用较小输入的值定义较大输入的值
- 递归定义集合:基础步给出”种子”元素,递归步给出”生长”规则
- 结构归纳证明:基础步验证种子元素,递归步证明”若构造原料有性质,则产物也有性质”
- 判断良定义性:检查递归步中引用的所有较小值是否都被基础步或之前的递归步覆盖
- 求显式公式:计算前几项观察规律,用数学归纳法验证猜想
- 广义归纳:确定集合上的良序,在归纳步中利用”所有更小元素满足性质”的假设
五、视频学习指南
视频资源
- Recursive Definitions — 递归定义的直观讲解
- Structural Induction — 结构归纳法详解
六、教材原文
教材原文
“Sometimes it is difficult to define an object explicitly. However, it may be easy to define this object in terms of itself. This process is called recursion.”
“We can use recursion to define sequences, functions, and sets. When we define a set recursively, we specify some initial elements in a basis step and provide a rule for constructing new elements from those we already have in the recursive step. To prove results about recursively defined sets we use a method called structural induction.”
“A proof by structural induction consists of two parts. These parts are the basis step, which shows that the result holds for all elements specified in the basis step of the recursive definition, and the recursive step, which shows that if the statement is true for each of the elements used to construct new elements, the result holds for these new elements.”