在这个专题中,我们将通过探讨 3 3 3 个经典的递归问题,学习用递归分析问题的成套方法与策略。
参考资料:《具体数学 第 2 2 2 版》
二、平面分割问题
用一把披萨刀直直地切 n n n 刀,最多可以得到多少块披萨饼?说得学术一点,平面上 n n n 条直线所界定的区域的个数 L n L_n Ln 最大是多少?这个问题于 1826 1826 1826 年被瑞士数学家斯坦纳解决。
1. 递归解
我们再次从研究小的情形开始。没有直线的平面有
1
1
1 个区域,有一条直线的平面有
2
2
2 个区域,有两条直线的平面有
4
4
4 个区域。
如果第
n
n
n 条直线能把每个已有区域分为两个,那么区域的个数就能加倍。可以确定的是,它肯定能把一个已有区域至多分成两个,因为每一个已有区域都是凸的(一条直线可以把一个凸区域分成至多两个新区域,这些新区域也是凸的)。但是当增加第三条直线时,无论如何放置,它至多只能分裂
3
3
3 个已有的区域:
从而
L
3
=
4
+
3
=
7
L_3 = 4 + 3 = 7
L3=4+3=7 是我们能够做到的最好结果。
我们给出适当的推广分析:当且仅当第
n
(
n
>
0
)
n (n > 0)
n(n>0) 条直线对
k
k
k 个已有区域进行了分裂时,区域的个数会增加
k
k
k 个。而当且仅当它与已有的那些直线相交于
k
−
1
k - 1
k−1 个不同的点时,它会对
k
k
k 个已有区域进行分裂。我们知道两条直线至多相交于一点,因而第
n
n
n 条直线与那
n
−
1
n - 1
n−1 条已有直线至多相交于
n
−
1
n - 1
n−1 个不同的点,故必定有
k
≤
n
k \le n
k≤n。从而我们得到了上界
L
n
≤
L
n
−
1
+
n
,
n
>
0
L_n \le L_{n - 1} + n, n > 0
Ln≤Ln−1+n,n>0事实上,我们可以做到在放置第
n
n
n 条直线时,使得它不与其他直线中的任何一条平行,从而与它们全部相交,且该直线不经过任何已经存在的交点,从而与它们全都在不同的点相交。于是,该递归式为
{
L
0
=
1
L
n
=
L
n
−
1
+
n
n
>
0
\begin{equation} \begin{cases} L_0 = 1 \\ L_n = L_{n - 1} + n & n > 0 \end{cases} \end{equation}
{L0=1Ln=Ln−1+nn>0核查后发现,已知的
L
1
L_1
L1、
L
2
L_2
L2、
L
3
L_3
L3 的值在这里完全正确,因此我们接受这一结果。
2. 解析解
现在需要一个封闭形式的解,但是猜测法在这里显得并不方便,因而我们采用另一种常用方法,即展开法:
L
n
=
L
n
−
1
+
n
=
L
n
−
2
+
(
n
−
1
)
+
n
=
L
n
−
3
+
(
n
−
2
)
+
(
n
−
1
)
+
n
⋯
=
L
0
+
1
+
2
+
⋯
+
(
n
−
2
)
+
(
n
−
1
)
+
n
=
1
+
S
n
,其中
S
n
=
1
+
2
+
3
+
⋯
+
(
n
−
1
)
+
n
\begin{split} L_n & = L_{n - 1} + n \\ & = L_{n - 2} + (n - 1) + n \\ & = L_{n - 3} + (n - 2) + (n - 1) + n \\ & \cdots \\ & = L_0 + 1 + 2 + \cdots + (n - 2) + (n - 1) + n \\ & = 1 + S_n,其中 S_n = 1 + 2 + 3 + \cdots + (n - 1) + n \end{split}
Ln=Ln−1+n=Ln−2+(n−1)+n=Ln−3+(n−2)+(n−1)+n⋯=L0+1+2+⋯+(n−2)+(n−1)+n=1+Sn,其中Sn=1+2+3+⋯+(n−1)+n现在我们得到了一个不错的解析解
L
n
=
n
(
n
+
1
)
2
+
1
n
≥
0
\begin{gather} L_n = \frac{n(n + 1)}{2} +1 & n \ge 0 \end{gather}
Ln=2n(n+1)+1n≥0不过我们仍需要构造一个数学归纳法的严格证明
L
n
=
L
n
−
1
+
n
=
(
1
2
(
n
−
1
)
n
+
1
)
+
n
=
1
2
n
(
n
+
1
)
+
1
L_n = L_{n - 1} + n = \bigg(\frac{1}{2}(n - 1)n + 1 \bigg) + n = \frac{1}{2} n(n + 1) + 1
Ln=Ln−1+n=(21(n−1)n+1)+n=21n(n+1)+1
3. 拓展问题
现在假设我们用折线代替直线,每一条折线包含一个 “锯齿”,平面上由
n
n
n 条这样的折线所界定的区域的最大个数
Z
n
Z_n
Zn 是多少?我们看到
从这些小的情形出发,就可以发现,一条折线与两条直线的情形相似,只是这 “两条” 直线并没有经过它们的交点延伸出去,从而使得区域相融合了:
区域
2
2
2、
3
3
3、
4
4
4 在一条折线的情况下是一个区域,因此我们失去了两个区域。如果我们把一条折线当成两条直线来放置,那么这两条直线的交点(锯齿点)必须放在它们与其它直线的交点之外。这样的话,相比于两条直线,每条折线仅仅损失两个区域,从而
Z
n
=
L
2
n
−
2
n
=
2
n
(
2
n
+
1
)
2
+
1
−
2
n
=
2
n
2
−
n
+
1
,
n
≥
0
\begin{equation} \begin{split} Z_n & = L_{2n} - 2n \\ & = \frac{2n(2n + 1)}{2} + 1 - 2n \\ & = 2n^2 - n + 1, n \ge 0 \end{split} \end{equation}
Zn=L2n−2n=22n(2n+1)+1−2n=2n2−n+1,n≥0比较封闭形式的
(
2
)
(2)
(2) 和
(
3
)
(3)
(3),我们发现对于较大的
n
n
n 有
{
L
n
∼
1
2
n
2
Z
n
∼
2
n
2
\begin{cases} L_n \sim \frac{1}{2} n^2 \\ Z_n \sim 2n^2 \end{cases}
{Ln∼21n2Zn∼2n2所以用折线所能得到的区域是直线所能得到的区域的大约四倍。