【具体数学 Concrete Mathematics】1.1 递归问题 讲义
本文主要围绕《具体数学》第一章 递归问题(Recurrent Problems)讲义部分的三个问题展开。分别是汉诺塔、平面上的直线以及约瑟夫问题。下面简单介绍一下递归问题,做一个简单的导入,具体的递归应用可以在三个例子中获得更好的体现:
递归问题:
递归问题的主要思想是将大的问题分解成小的问题,然后只要提供最小的问题的具体解决方案即可。这样实际上递归方案并没有给出原问题的具体解决方案,而是给了一个解决问题的步骤。
一个典型的例子是《线性代数》中计算行列式的值
D
=
∑
j
=
1
n
A
i
j
D=\sum_{j=1}^n A_{ij}
D=∑j=1nAij。这里就是将计算
n
n
n维行列式
D
D
D分解成
n
n
n个
n
−
1
n-1
n−1维行列式
A
i
j
A_{ij}
Aij的计算。最后可以展开到
1
1
1维行列式
∣
x
∣
=
x
|x|=x
∣x∣=x。整个过程中直接计算的只有最小的问题模块——
1
1
1维行列式,其他维度都是直接根据递归方案来计算的。
通过这个小例子我们也可以看到递归方案只有到最后一步才真正解决具体问题,此前我们都假设更小的问题答案已知,如
D
=
∑
j
=
1
n
A
i
j
D=\sum_{j=1}^n A_{ij}
D=∑j=1nAij中,我们假设
A
i
j
A_{ij}
Aij都已知,但是其实
A
i
j
A_{ij}
Aij的值还需要进一步递归直到
1
1
1维行列式才能计算出具体值。
如果这个例子没能理解,请看下面三个具体的例子,然后再回来看这个小例子,相信读者会有新的理解。
,
1.1.1 汉诺塔
汉诺塔问题的设定是:给定一个由8个圆盘
1
−
8
1-8
1−8(
1
1
1号圆盘最小,
8
8
8号圆盘最大)和三根柱子
A
,
B
,
C
A,B,C
A,B,C,从上向下这些圆盘大小逐渐递减(即圆盘不能放在比自身小的圆盘上)放在柱子
A
A
A上。
问: 最少需要多少步能够将所有圆盘都转移到柱子
C
C
C上。