zoukankan      html  css  js  c++  java
  • 四种典型的递推关系

    Ⅰ.Fibonacci数列

    在所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,就有很多这类的题目。而在较为复杂的Basic、Pascal、C语言中,Fibonacci数列类的题目因为解法相对容易一些,逐渐退出了竞赛的舞台。可是这不等于说Fibonacci数列没有研究价值,恰恰相反,一些此类的题目还是能给我们一定的启发的。

    Fibonacci数列的代表问题是由意大利著名数学家Fibonacci于1202年提出的“兔子繁殖问题”(又称“Fibonacci问题”)。

    问题的提出:有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?

    解:设满x个月共有兔子Fx对,其中当月新生的兔子数目为Nx对。第x-1个月留下的兔子数目设为Ox对。则:

         Fx=Nx+Ox

    而   Ox=Fx-1

    Nx=Ox-1=Fx-2 (即第x-2个月的所有兔子到第x个月都有繁殖能力了)

     ∴   Fx=Fx-1+Fx-2          边界条件:   F0=0,F1=1

    由上面的递推关系可依次得到

    F2=F1+F0=1,F3=F2+F1=2,F4=F3+F2=3,F5=F4+F3=5,……。

    Ⅱ.Hanoi塔问题

    问题的提出:Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图1所示。

     
     


    要求把a柱上n个圆盘按下述规则移到c柱上:

    (1)一次只能移一个圆盘;

    (2)圆盘只能在三个柱上存放;

    (3)在移动过程中,不允许大盘压小盘。

    问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?

    解:设hn为n 个盘子从a柱移到c柱所需移动的盘次。显然,当n=1时,只需把a 柱上的盘子直接移动到c柱就可以了,故h1=1。当n=2时,先将a柱上面的小盘子移动到b柱上去;然后将大盘子从a柱移到c 柱;最后,将b柱上的小盘子移到c柱上,共记3个盘次,故h2=3。以此类推,当a柱上有n(n2)个盘子时,总是先借助c柱把上面的n-1个盘子移动到b柱上,然后把a柱最下面的盘子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总共移动hn-1+1+hn-1个盘次。

         ∴hn=2hn-1+1    边界条件:hn-1=1

    Ⅲ.平面分割问题

    问题的提出:
    设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。

    解:设an为n条封闭曲线把平面分割成的区域个数。 由图2可以看出:a2-a1=2;a3-a2=4;

    a4-a3=6。从这些式子中可以看出an-an-1=2(n-1)。当然,上面的式子只是我们通过观察4幅图后得出的结论,它的正确性尚不能保证。下面不妨让我们来试着证明一下。当平面上已有n-1条曲线将平面分割成an-1­个区域后,第n-1条曲线每与曲线相交一次,就会增加一个区域,因为平面上已有了n-1条封闭曲线,且第n条曲线与已有的每一条闭曲线恰好相交于两点,且不会与任两条曲线交于同一点,故平面上一共增加2(n-1)个区域,加上已有的an-1个区域,一共有an-1+2(n-1)个区域。所以本题的递推关系是an=an-1+2(n-1),边界条件是a1=1。

    平面分割问题是竞赛中经常触及到的一类问题,由于其灵活多变,常常让选手感到棘手,

    Ⅳ.Catalan数

    Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。

    问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用hn表之,hn即为Catalan数。例如五边形有如下五种拆分方案(图6-4),故h5=5。求对于一个任意的凸n边形相应的hn

    解:设Cn表示凸n边形的拆分方案总数。由题目中的要求可知一个凸n边形的任意一条边都必然是一个三角形的一条边,边P1 Pn也不例外,

    再根据“不在同一直线上的三点可以确定一个三角形”,只要在P2,P3,……,Pn-1点中找一个点Pk(1<k<n),与P1、Pn 共同构成一个三角形的三个顶点,就将n边形分成了三个不相交的部分(如图3所示),我们分别称之为区域①、区域②、区域③,其中区域③必定是一个三角形,区域①是一个凸k边形,区域②是一个凸n-k+1边形,区域①的拆分方案总数是Ck,区域②的拆分方案数为Cn-k+1,故包含△P1PkPn的n 边形的拆分方案数为CkCn-k+1种,而Pk可以是P2,P3,……,Pn-1种任一点,根据加法原理,凸n边形的三角拆分方案总数为,同时考虑到计算的方便,约定边界条件C2=1。

    小结:通过上面对四种典型的递推关系建立过程的探讨,可知对待递推类的题目,要具体情况具体分析,通过找到某状态与其前面状态的联系,建立相应的递推关系。

    例题精讲

    例1、在一个正六边形的六个区域中的每一个区域染上红、黄、蓝、紫四种颜色之一,要求相邻的两个区域染色不相同,则有多少种不同的染色方法?

    【分析】本问题属于排列组合方面的问题。

    思路一:利用排列组合的知识进行求解,由于图形的特殊性,可以按染色情况进行分类。

    思路二:将该图形抽象出来,形成一般的问题:“将圆分为个扇形,每个扇形区域染上红、黄、蓝、紫四种颜色之一,要求相邻的扇形区域染色不相同,问有多少种染色方法?”先求通项或递推关系,再求。

    【解答】解法一:按A,C,E染色情况进行分类:

    故总计共有108+192+432=732种方法。

    解法二:将问题抽象成一般问题:“将圆分为个扇形,每个扇形区域染上红、黄、蓝、紫四种颜色之一,要求相邻的扇形区域染色不相同,记染色方法总数为an,求a6”。

    【评注】(1)解法一中若不按染色情况进行分类可能比较复杂,并且当A,C,E染二种色时,计算染法数比较容易出错;

    (2)解法二中关键之处在于建立递推式子,但递推式子建立后计算比较方便。



    例2 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。试求出蜜蜂从蜂房a爬到蜂房b的可能路线数。


      解:这是一道很典型的Fibonacci数列类题目,其中的递推关系很明显。由于“蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行”的限制,决定了蜜蜂到b点的路径只能是从b-1点或b-2点到达的,故fn=fn-1+fn-2 (a+2nb),边界条件fa=1,fa+1=1。

    练习:

    第1题(5分),有5本不同的数学书分给5个男同学,有4本不同的英语书分给4个女同学,将全部书收回来后再从新发给他们,与原方案都不相同的方案有________种。

    答案:

    5!*4!+D(5)*D(4)=1140480

    其中:D(n)=(n-1)*(D(n-1)+D(n-2))  (n > 2)

          D(1)=0  D(2)=1

     第2题(5分),在m*n的棋盘上,每个方格(单位正方形,即边长为1的正方形)的顶点称为格点。以格点为顶点的多边形称为格点多边形。若设格点凸N边形面积的最小值为gn,格点凸N边形内部(非顶点的)格点的个数的最小值为fn,则gn和fn的关系式为gn=___________。

    答案:

    Gn= fn+N/2-1  ( N >= 3 )

    第3题(8分),有位小同学喜欢在方阵中填数字,规则是按下图示例从右上角开始,按斜线填数字,碰到边界就重新。显然,数字1在坐标(1,5)位置,数字25在坐标(5,1)位置。后来这位小朋友想知道,对于N阶的方阵,随机取一个位置(x,y),并规定x≤y,问这个位置上应该填的数字是多少?5阶方阵的

    示例图如下:

        11    7     4     2     1

        16    12    8     5     3

        20    17    13    9     6

        23    21    18    14    10

        25    24    22    19    15

    答案:

    (N-y+x)*(N-y+x-1)/2+x

    第4题(5分),把三角形各边分成n等分,过每一分点分别做各边的平行线,得到一些由三角形的边和这些平行线所组成的平行四边形。n为已知整数,能组成_______个平行四边形。

    答案:3*C(n+2,4)

     第5题(5分),由a,b,c3个不同的数字组成一个N位数,要求不出现两个a相邻,也不出现两个b相邻,这样的N位数的个数为AN,用AN-1和AN-2表示AN的关系式为:AN=_______________。

    答案:

    AN= 2*AN-1+AN-2

  • 相关阅读:
    nodejs关于前后端图片上传的思路及实现代码
    vue项目better-scroll使用注意点
    nuxt.js的使用和开发,一款vue基于服务器SSR渲染工具
    vue-cli3.0中自定css、js和图片的打包路径
    Vue.js watch监视属性
    React Developers的10个超实用神奇工具
    Vue 3.0 体验 Vue Function API
    Dojo Store 概念详解
    React Native 实现城市选择组件
    java 环境变量 设置 问题
  • 原文地址:https://www.cnblogs.com/rmy020718/p/9443665.html
Copyright © 2011-2022 走看看