分割区域_递归思路

前言: 在学习算法的递推思想过程中遇到了几个平面分割问题,这些问题使我自身在思考过程中遇到了阻力,所以下面首先给出这些问题的解法及思路。并且因为这几个问题虽然难度适中,但比较具有的代表性,所以通过分析解决这些问题的思路进而给出平时如何去判断并找出递推关系一般思路。(下面所涉及的平面都有边界)

  • 问题一:平面内有n条直线,最多可以把这个平面划分成多少区域?

    思路: 首先看一下下面几张图

    图 1
    图 2
    图 3
    图4
可以发现当在平面内(⚪内)两直线没有交点则将⚪分为3部分,而有交点则会将⚪分为4部分。并且,当只有一条直线,要再添一条直线时,可以发现,即使不与已有的直线相交仍然会多出一块儿区域,而若相交的话则会多出一块儿区域。

所以此时给出猜想:若新增一条直线并不与任何一条已有直线相交,则只会增加一块儿区域,而每和一条直线相交则会增加多增加一块儿区域。接下来我们再增加一条直线来看看我们的猜想是否正确。

图 5
图 6
图 7
从上面这三个图我们可以发现,当加上第三条线的时候,再产生两个交点时产生的区域最多,且为刚才的结论,即因为多了两个交点(即和两条直线相交),则应该增加3个。(因为这是题目而非研究的课题,所以一般发现的递推式可以符合举出的例子就可以判断其对了,因为并非严谨的证明。当然也不排除碰巧符合的情况。)

解答:

  • f[n]=f[n-1]+n
    /* 解释:
    1. f(n) 代表n条直线最多分为多少区域
    2. n 是因为由猜想可知,除了本身新增一条直线,若不与任何直线相交则会 增加1个区域,而每与一个直线相交则会多增加一个区域。因为增加的是第 n 条直线,所以最多可与n-1条直线相交即多增加n-1个区域,即最多增加 n 个区域。*/
  • f[n]=n*(n+1)/2+1

  • 问题二:平面内有n条封闭曲线,任意两条封闭曲线交于两点,任意三条封闭曲线不交于一点,求划分出的区域数量?

    思路: 直接图示当出现第 n 个封闭曲线时的情形

解答:

  • 记n条曲线划分出来的区域数量为f[n]
  • n条曲线被前n-1条曲线分割成2(n-1)段弧线
  • 每一段弧线又会将一个区域划分出两个区域,所以是比原来多了2(n-1)个区域
  • 所以 f[n]=f[n-1]+2(n-1)
  • 得到通项:f[n]=n^2-n+2

总结: 首先因为计算机很适合处理递归问题,并且题目中可以用递归处理的问题不在少数。所以通过多做题可以在拿到一个新题目的时候,初步分析可以判断该题是否一定不能用递归处理,而只要该题有可能用递归处理,那么找出递归关系则变成了关键,那么如何找递归关系呢?

  1. 由问题一的求解得出,我们可以先在规模小的情况下分析,甚至是尽可能小的规模下分析,因为很多递归都是对题目中的任何情况都适用。
  2. 因为递归往往伴随着规模的逐步增加,并且递归关系式也是新的元素和前一个或前几个元素的关系。那么由问题二的求解得出,我们可以将关注点只专注于新增元素,并由此分析与之前的元素的关系。
  3. 由问题一、二共同得出,处理递归问题时要心中只区分新和旧元素两部分,避免由新元素到上一个元素再到上上一个元素,这样陷入思维的循环中。我们只关心当下,而将之前当成整体。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drdajie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值