具体数学 第一章

第一章 递归问题


1 汉诺塔

 

        汉诺塔问题可以简单描述如下:现有三根杆子,比如A、B、C。现在A杆上有n个由小至大依次放的盘子(大的盘子位于下面),需要把A杆上的盘子移至另外一根杆子。规则是只是能小盘子放大盘子上面。问最少的移动步数是多少?示意图如下:

图1 汉诺塔示意图


首先把问题条件说清楚,有三个条件需要注意的:
  • 有A,B,C三个柱子
  • 需要把所有的盘子从A柱移至其他柱子(B柱或C柱)
  • 在移动的过程中,只能小盘子在大盘子上面

1.1 问题分析

在递归问题中,书上已经说得很清楚,采用类似于数学归纳法的方式来进行处理。

  • 当n=1时,只需要移动1次就可以了。可以得到
  • 当n=2时,移动步数为
  • 假设当有n-1个盘子时,移动步数为
  • 那么当有n个盘子的时候,可以按如下方式移动
    • 首先把上面n-1个盘子移动至B柱
    • 再把最大的盘子移动至C柱
    • 再把B柱的n-1个盘子移动至C柱
  • 那么有n个盘子的时候,移动数目为
在这里,只是得到了如下的递推关系式:


这里介绍一下如何从这种递推关系,得到最终的表达式:


2 平面切分问题

接下来书中提到了一个很有趣的问题,就是给n条直线,可以把平面切分成为几个部分。其实给定的图形是直线的时候是很特殊的情况,当我们把直线换成V字形的呢?把直线换成Z字形的呢?把直线线换成十字形的呢?把直线换成十字形的呢?或者换成不规则的情况下,应该如何分析。

2.1 问题分析

尽管具体数学书本上讲得很清晰,但是我个人觉得还是有思路不太明朗的地方。在这里我将介绍一种完全不同的方法去解决这个问题,当然,还是在递归的前题下。这里采用逆向思维的方式:

2.1.1 如何增加新的区域?

如果我们知道有n-1条直线下的区域数,并且知道当加入第n条直线之后,增加的新的区域数目,那么在n条直线下的区域数,无疑是可以直接确定的。我们需要考虑如何来增加新的区域?注意看三个思考。

思考1:在平面切分问题中,直线、相交产生的射线、区域内相交产生的线段,在其内部无交点的情况下,可以增加一个新区域。

证明:

1、直线:

      约束条件有两个:平面切分问题,内部无交点

      一条直线内部无交点,只能是不与其他直线,射线,线段相交。对于原有的区域数目而言,必然新增加一个区域。并且只能增加一个(内部无其他交点)。

2、射线:

      这里需要强调一下相交产生

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值