递推法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入:x,y,z的数值 输出:成虫对数 示例:
输入:x=1 y=2 z=8 输出:37
分析
首先我们来看样例:每隔1个月产2对卵,求过8 月(即第8+1=9月)的成虫个数
月份 1 2 3 4 5 6 7 8 9 … 新增卵 0 2 2 2 6 10 14 26 46 … 成虫 1 1 1 3 5 7 13 23 37 …
计算河心n个石礅可承载的最大青蛙数
设f[i]表示河心i个石礅可承载的最大青蛙数(1<=i<=n) 左岸为A,右岸为D
(1) 0个石礅,f[0]=0 (2) 1个石礅,f[1]=m+1 (3) 2个石礅s1,s2,f[2]=?
(1)A上m+1只青蛙s1 (2) A上m+1只青蛙 s2 , (3)s1上的m+1青蛙 s2 (4) A上m+1只青蛙s1 因此,f[2]=m+1+f[1]+f[1]=3*(m+1) (4) 3个石礅s1,s2,s3, (1)A上3(m+1)只青蛙s1,s2 (2) A上m+1只青蛙 s2 , (3)s1,s2上的3(m+1)青蛙 s2 (4) A上3(m+1)只青蛙s1,s2 因此,f[3]=m+1+2*f[2]=7*(m+1) …… (5) n个石礅? (1)A上f(n-1)只青蛙s1…sn-1 (2) A上m+1只青蛙 sn (3)s1…sn-1上的f(n-1)只青蛙sn (4) A上f(n-1)只青蛙s1…sn-1 因此, f[n]=m+1+2*f[n-1]
分析
设数组A[i]表示第i月新增的成虫个数。 由于新成虫每过x个月产y对卵,则可对每个A[i]作如下
操作: A[i+k*x+2]:=A[i+k*x+2]+A[i]*y (1<=k,i+k*x+2<=z+1) 因为A [i]的求得只与A[1]~A[i-1]有关,即可用递推求法。 则总共的成虫个数为:
=Pi-2+kak+Qi-2+kd+Ri-2+kak-1
∴ an=Pn-k+2ak+Qn-k+2d+Rn-k+2ak-1
ak=(an-Qn-k+2d+Rn-k+2ak-1)/Pn-k+2
……⑤
根 但 多。据由公于式Pn⑤-k+2,递可减以,顺因推此a最2、后a得3、出…的、aamM要。比虽直然接仍利然用存公在式实①数精误确差得,
z 1
ans A[i] i 1
例2 : HLeabharlann noi塔问题Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。 开始时,这n个圆盘由大到小依次套在a柱上,如图1所 示。要求把a柱上n个圆盘按下述规则移到c柱上:
(1)一次只能移一个圆盘; (2)圆盘只能在三个柱上存放; (3)在移动过程中,不允许大盘压小盘。
Ri=Ri-2-2Ri-1
……④
显然,P1=0 Q1=0 R1=1 (i=1)
P2=1 Q2=0 R2=0 (i=2)
将初值P1Q1R1和P2Q2R2代入②③④可以求出PnQnRn
∵ an=Pna2+Qnd+Rna1
∴ a2=(an-Qnd+Rna1)/Pn
然后根据公式①递推求出am,问题解决。
改进算法
n1
CiCni1
i2
边界条件C2=1。
例6:实数数列
一个实数数列共有N项,已知 ai=(ai-1-ai+1)/2+d,(1<I<N) (N<60) 键盘输入N,d,a1,an,m,输出am。 输入数据均不需判错。
分析
根据公式ai=(ai-1-ai+1)/2+d 变形得,ai+1=ai-1-2ai+2d,因 此该数列的通项公式为:ai=ai-2-2ai-1+2d,已知a1,如 果能求出a2,这样就可以根据公式递推求出am
问将这n个盘子从a柱移动到c柱上,总计需要移动多少 个盘次?
a
b
c
图1
分析
设当hnn=为1时n ,个只盘需子把从aa柱柱移上到的c盘柱子所直需接移移动动的到盘c次柱。就显可然以,了, 故去h;1=然1。后当将n大=2盘时子,从先a将柱a移柱到上c面柱的;小最盘后子,移将动b到柱b上柱的上小 盘a柱子上移有到nc(柱n>上=2, )个共盘记子3个时盘,次总,是故先借h2=助3。c柱以把此上类面推的,n当-1 个盘子移动到b柱上,然后把a柱最下面的盘子移动到c 柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总 共移动hn-1+1+hn-1个盘次。
设Cn表示凸n边形的拆分方案总数。由题目中的要求可知一个凸n 边形的任意一条边都必然是一个三角形的一条边,边P1 Pn也不例 外,再根据“不在同一直线上的三点可以确定一个三角形”,只 要构成在一P2个,三P3角,形…的…三,个Pn顶-1点点中,找就一将个n边点形Pk分(1成<k了<n三),个与不P相1、交P的n 部共分同 (如图),我们分别称之为区域①、区域②、区域③,其中区域③必 定是一个三角形,区域①是一个凸k边形,区域②是一个凸n-k+1 边故P2包形,含,P3△区,P域…1①P…kP的,n拆的Pn分n-1种方边任案形一总的点数拆,是分根C方k据,案加数区法为域原② Ck理的Cn,拆-k+凸分1种n方边,案形而数的P为k三可C角以n-k拆是+1, 分方案总数为:
(统称为合法的落脚点); 2. 一只青蛙只有背上没有其它青蛙的时候才能够从一个落脚点跳到
另一个落脚点; 3. 青蛙允许从左岸A直接跳到河心的石墩、荷叶和右岸的石墩D上,
允许从河心的石墩和荷叶跳到右岸的石墩D上; 4. 青蛙在河心的石墩之间、荷叶之间以及石墩和荷叶之间可以来回
跳动; 5. 青蛙在离开左岸石墩后,不能再返回左岸;到达右岸后,不能再
如何建立递推关系 递推关系有何性质 如何求解递推关系
递推的形式
顺推法和倒推法
例1:昆虫繁殖
科学家在热带森林中发现了一种特殊的昆虫, 这种昆虫的繁殖能力很强。每对成虫过x个月产 y对卵,每对卵要过两个月长成成虫。假设每个 成虫不死,第一个月只有一对成虫,且卵长成 成虫后的第一个月不产卵(过X个月产卵),问过 Z个月以后,共有成虫多少对?x>=1,y>=1,z>=x
问题讨论:青蛙过河(Frog )
大小各不相同的一队青蛙站在河左岸的石墩(记为A) 上,要过到对岸的石墩(记为D)上去。河心有几片菏叶 (分别记为Y1…Ym)和几个石墩(分别记为S1…Sn)。图 示如下:
荷叶Yi
左岸石墩A
右岸石墩D
河心石墩Sj
试题描述
青蛙的站队和移动方法规则如下: 1. 每只青蛙只能站在荷叶、石墩,或者仅比它大一号的青蛙背上
对一个试题,我们要是能找到后一项与前一项的关系并 清楚其起始条件(或最终结果),问题就可以递推了, 接下来便是让计算机一步步了。让高速的计算机从事这 种重复运算,真正起到“物尽其用”的效果。
递推概念
给定一个数的序列H0,H1,…,Hn,…若存在 整数n0,使当nn0时,可以用等号(或大于 号、小于号)将Hn与其前面的某些项 Hn(0i<n)联系起来,这样的式子就叫做递 推关系。
∵ ai=ai-2-2ai-1+2d
……(1)
=ai-2-2(ai-3-2ai-2+2d)+2d
=-2ai-3+5(ai-4-2ai-3+2d)-2d
=5ai-4-12ai-3+8d
……
一式直。迭代下去,直到最后,可以建立ai和a1与a2的关系
分析
设ai=Pia2+Qid+Ria1,我们来寻求Pi,Qi,Ri的变化规律。
试题描述
青蛙希望最终能够全部移动到D上,并完成站队。 设河心有m片荷叶和n个石墩,请求出这队青蛙至多有
多少只,在满足站队和移动规则的前提下,能从A过到 D。 [输入文件] 文件仅有两行,每一行仅包含一个整数和一个换行/回 车符。第一行的数字为河心的石墩数n(0<=n<=25), 第二行为荷叶数m(0<=m<=25)。 [输出文件] 文件中仅包含一个数字和一个换行/回车符。该数字为 在河心有n个石墩和m片荷叶时,最多能够过河的青蛙 的只数。
an=an-1+2(n-1) 边界条件是a1=1。
例4:杨辉三角
分析
C C C r r r1
n
n1
n1
组合公式的证明:
C C r (n 1)!
n1 r!(n r 1)!
r1 (n 1)! n1 (r 1)!(n r)!
C C C r r1 (n 1)! (n r) (n 1)!r n! r
跳回; 6. 假定石墩承重能力很大,允许无论多少只青蛙都可呆在上面。但
是,由于石墩的面积不大,至多只能有一只青蛙直接站在上面, 而其他的青蛙只能依规则1落在比它大一号的青蛙的背上。 7. 荷叶不仅面积不大,而且负重能力也有限,至多只能有一只青蛙 站在上面。 8. 每一步只能移动一只青蛙,并且移动后需要满足站队规则; 9. 在一开始的时候,青蛙均站在A上,最大的一只青蛙直接站在石墩 上,而其它的青蛙依规则6站在比其大一号的青蛙的背上。
但 除 断 显法的然仔,扩,细分因大这析此。种会在算,存实法上在际虽述实中简算法数 , 单有误 当 但差 不一m超, 可个过这 靠明3个 。0显时的误,差缺求在陷出以:的后在a递m求就推由明求于显在a偏m的求离过a正2要程确运又值不用。
为了减少误差,我们可设计如下算法:
∵ ai=Pia2+Qid+Ria1 =Pi-1a3+Qi-1d+Ri-1a2 =Pi-2a4+Qi-2d+Ri-2a3 ……
分析
(4)3个石礅s1,s2,s3, (1)A上3(m+1)只青蛙s1,s2 (2) A上m+1只青蛙 s2 , (3)s1,s2上的3(m+1)青蛙 s2 (4) A上3(m+1)只青蛙s1,s2
因此,f[3]=m+1+2*f[2]=7*(m+1) ……
(5)n个石礅? (1)A上f(n-1)只青蛙s1…sn-1 (2) A上m+1只青蛙 sn (3)s1…sn-1上的f(n-1)只青蛙sn (4) A上f(n-1)只青蛙s1…sn-1
∴hn=2hn-1+1 边界条件:hn-1=1
例3 :平面分割问题
设有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个区域,一共有an1+2(n-1)个区域。所以本题的递推关系是
n1
n1
r!(n r)!
r!(n r)! n
例5:Catalan数
在一个凸n边形中,通过不相交于n边形内部的 对角线,把n边形拆分成若干三角形,不同的拆 分形任数 有 意目 如 的用 下 凸hn五n边表种形之拆相,分应h方n的即案h为,n。C故ahta5=la5n。数求。对例于如一五个边
分析
∵ ai=ai-2-2ai-1+2d
∴ ai=Pi-2a2+Qi-2d+Ri-2a1-2(Pi-1a2+Qi-1d+Ri-1a1)+2d
=(Pi-2-2Pi-1)a2+(Qi-2-2Qi-1+2)d+(Ri-2-2Ri-1)a1
∴ Pi=Pi-2-2Pi-1
……②
Qi=Qi-2-2Qi-1+2
……③
递推算法
朱全民
例1.Fibonacci数列
Fibonacci数列的代表问题是由意大利著 名数学家Fibonacci于1202年提出的“兔 子繁殖问题”(又称“Fibonacci问题”)。
问题: 一个数列的第0项为0,第1项为1,以后 每一项都是前两项的和,这个数列就是著 名的裴波那契数列,求裴波那契数列的第 N项。
解答
由问题,可写出递推方程
1n 0
fn
2n 1
fn1 fn2 n 2
算法: F[0] := 1; F[1] := 2; FOR i := 2 TO N DO F[I] := F[I – 1] + F[I – 2];
总结
从这个问题可以看出,在计算裴波那契数列的每一项目 时,都可以由前两项推出。这样,相邻两项之间的变化 有一定的规律性,我们可以将这种规律归纳成如下简捷 的递推关系式:Fn=g(Fn-1),这就在数的序列中,建立 起后项和前项之间的关系。然后从初始条件(或是最终 结果)入手,按递推关系式递推,直至求出最终结果 (或初始值)。很多问题就是这样逐步求解的。
相关文档
最新文档