递归问题:瑞士披萨

目录

1 问题描述

用一把披萨刀直直的切 n刀,可以最多获得多少块披萨?(不要求每块披萨形状一样)。更学术一点的表述为:平面上 n条直线所能界定的区域的最大个数 Ln是多少?

2 从小入手

按照我们探讨汉诺塔的思路,先从小入手。

cat/spider image

Figure 1: 切1,2,3刀的结果

可以看出第三条直线对原有的三个区域( 区域1,3,4)进行了分割,使得区域个数增加了三个,而第三条直线与原来的两条直线有交点。推而广之,第 n条直线可以使得区域个数增加 k个,当前仅当第 n条直线对已有的 k个区域进行了分割;第 n条直线对已有的 k个区域进行分割,当前仅当它与已有的 k1 条直线有交点。两条直线之多有一个交点,因此这条新的直线与已经存在的 n1 条直线至多有 n1 个交点,故必有 kn

3 披萨递归式

通过上节分析,有:

LnLn1+n,n>0

另外,很容易分析,上式中的等号可以达到。只需要在纺织第 n 条直线时,使得其不予其他直线中的任何一条平行,且新的直线不经过任何已经存在的交点。于是,披萨递归式演变为:

Ln=Ln1+n,n>0

对于该递归式,我们需要一个闭式的解(关于什么样的解才是闭式解,请参考《具体数学》第6页的部分论述,此处省略若干字)。通过把披萨递归式展开,我们发现:

Ln=Ln1+n=Ln2+(n1)+n=Ln3+(n2)+(n1)+n=L0+1+2++n

显然:

Ln=1+n(n+1)2,n>0

4 拓展1:锯齿刀

现在考虑切割披萨问题的一个变形。假设我们用折线代替直线,每一条折现包含一个锯齿,就像等腰三角形去掉底一样。如下图所示,平面上由 n 条这样的折线所界定的区域数 Zn 最多是多少?

cat/spider image

Figure 2: 折形曲线划分平面

从上图的小规模实现可以发现,除了两条直线不经过它们的交点延伸出去外,一条折线和两条直线相同:

cat/spider image

Figure 3: 一条折线和两条直线

区域2,3,4对于两条直线来说是不同的区域,但是在一条折线的情况下是单独的一个区域,于是一条折线相对于两条直线减少了两个区域。如果每条折线的顶点都位于它与其他直线交点之外,每一条折线损失两个区域是固定不变的,于是有:

Zn=L2n2n=2n(2n+1)2+12n=2n2n+1,n0

相比较而言,如果 n 足够大,则 LnZn 有如下关系:

Ln12n2Zn2n2

即,有 当 nZn=4Ln

5 拓展2:Z形刀

假设有 n 条Z行曲线所定义的区域最大个数是多少?如图所示。 每条Z行线由两条平行的无线半直线和一条直线段组成。

cat/spider image

Figure 4: 一条折线和两条直线

如图所示,分析知: 一条Z线划分生成的区域相当于三条曲线,只是Z形曲线划分的区域比三条曲线要少了5个,其中四个区域是因为直线的不完整造成的,一个区域是因为Z型曲线的两条平行线造成的。所以:

Zn=L3n5n=3n(3n+1)2+15n=9n227n2+1

6 拓展3: 三维奶酪问题

在一块后奶酪上画出五道直的刀痕,可以得到多少块奶酪?( 在划奶酪时,奶酪必须保持在它原来的位置上,且每道切痕必定与三维空间中的一个平面相对应。) 求 Pn 的一个递归关系,这里 Pn 表示 n 个不同的平面所能定义的三维区域的最大个数。