收藏 分享(赏)

基本算法2-递推法.ppt

上传人:HR专家 文档编号:7352503 上传时间:2019-05-15 格式:PPT 页数:32 大小:288KB
下载 相关 举报
基本算法2-递推法.ppt_第1页
第1页 / 共32页
基本算法2-递推法.ppt_第2页
第2页 / 共32页
基本算法2-递推法.ppt_第3页
第3页 / 共32页
基本算法2-递推法.ppt_第4页
第4页 / 共32页
基本算法2-递推法.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、基本算法二,递推策略,一、引例:Fibonacci数列,Fibonacci数列的代表问题是由意大利著名数学家Fibonacci于1202年提出的“兔子繁殖问题”(又称“Fibonacci问题”)。 问题:一个数列的第0项为0,第1项为1,以后每一项都是前两项的和,这个数列就是著名的裴波那契数列,求裴波那契数列的第N项。,解答,由问题,可写出递推方程,算法:f0:=1; f1:=2;for i:=2 to n do fi:=fi1+fi2;,总结,从这个问题可以看出,在计算裴波那契数列的每一项目时,都可以由前两项推出。这样,相邻两项之间的变化有一定的规律性,我们可以将这种规律归纳成如下简捷的递推

2、关系式:Fn=g(Fn-1),这就在数的序列中,建立起后项和前项之间的关系。然后从初始条件(或是最终结果)入手,按递推关系式递推,直至求出最终结果(或初始值)。很多问题就是这样逐步求解的。 对一个试题,我们要是能找到后一项与前一项的关系并清楚其起始条件(或最终结果),问题就可以递推了,接下来便是让计算机一步步了。让高速的计算机从事这种重复运算,真正起到“物尽其用”的效果。,递推法,所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。可用递推算法求解的题目一般有以下二个特点:1、问题可以划

3、分成多个状态;2、除初始状态外,其它各个状态都可以用固定的递推关系式来表示。在我们实际解题中,题目不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式。,二、递推概念,给定一个数的序列H0,H1,Hn,若存在整数n0,使当nn0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hi(0in)联系起来,这样的式子就叫做递推关系。 如何建立递推关系 递推关系有何性质 如何求解递推关系,三、解决递推问题的一般步骤,建立递推关系式确定边界条件递推求解,四、递推的两种形式,顺推法和倒推法,采用具体化、特殊化的方法寻找规律,平面上n条直线,任两条不平行,任三条不共点,问这n条直线把这平面

4、划分为多少个部分?,设这n条直线把这平面划分成Fn个部分。 先用具体化特殊化的方法寻找规律,如图所示,易知的前几项分别为,这些数字之间的规律性不很明显, 较难用不完全归纳法猜出Fn的一般表达式。但我们可以分析前后项之间的递推关系,因为这些图形中,后一个都是由前一个添加一条直线而得到的,添加一条直线便增加若干个区域。,一般地,设原来的符合题意的n-1条直线把这平面分成 个区域,再增加一条直线l,就变成n条直线,按题设条件,这l必须与原有的n-1条直线各有一个交点, 且这n-1个交点及原有的交点互不重合。这n-1个交点把l划分成n个区间,每个区间把所在的原来区域一分为二,所以就相应比原来另增了n个

5、区域,即:这样,我们就找到了一个从Fn-1到Fn的的递推式,再加上已知的初始值F1=2,就可以通过n-1步可重复的简单运算推导出Fn的值。,var a,i,n:longint; beginread(n);a:=2;for i:=2 to n do a:=a+i;writeln(a); end.,平面上有8个圆,最多能把平面分成几部分?,1,2,3,4,5,6,Fn=Fn-1+2 (n-1),圆周上两个点将圆周分为两半,在这两点上写上数1;然后将两段半圆弧对分,在两个分点上写上相邻两点上的数之和;再把4段圆弧等分,在分点上写上相邻两点上的数之和,如此继续下去,问第6步后,圆周上所有点上的数之和是

6、多少?,分析:先可以采用作图尝试寻找规律。,第一步:圆周上有两个点,两个数的和是1+1=2; 第二步:圆周上有四个点,四个数的和是1+1+2+2=6;增加数之和恰好是第一步圆周上所有数之和的2倍。 第三步:圆周上有八个点,八个数的和是1+1+2+2+3+3+3+3=18,增加数之和恰好是第二步数圆周上所有数之和的2倍。 第四步:圆周上有十六个点,十六个数的和1+1+2+2+3+3+3+3+4+4+4+4+5+5+5+5=54, 增加数之和恰好是第三步数圆周上所有数之和的2倍。 这样我们可以知道,圆周上所有数之和是前一步圆周上所有数之和的3倍。 设An为第n步后得出的圆周上所有数之和,则An=3

7、An1,在 nn的正方形钉子板上(n是钉子板每边上的钉子数),求连接任意两个钉子所得到的不同长度的线段种数.,Fn=Fn-1+n,某公共汽车线路上共有15个车站(包括起点站和终点站)。在每个站上车的人中,恰好在以后各站下去一个。要使行驶过程中每位乘客都有座位,车上至少要备有多少个座位?,从表中可以看出车上人数最多是56人,所以车上至少要准备56个座位。,例、有一只经过训练的蜜蜂只能爬向右侧相邻的 蜂房,不能反向爬行。试求出蜜蜂从蜂房a爬到蜂 房b的可能路线数。,问题分析:这是一道很典型的Fibonacci 数列类题目,其中的递推关系很明显。由于 “蜜蜂只能爬向右侧相邻的蜂房,不能反向爬 行”的

8、限制,决定了蜜蜂到b点的路径只能是 从b-1点或b-2点到达的,故fn=fn-1+fn-2 (a+2=n=b),边界条件fa=1,fa+1=1。,例、打印杨晖三角形的前10行。杨晖三角形的前5行如左下图所示。,问题分析:我们观察左上图不太容易找到规律,但如果将左上图转化为右上图就不难发现杨辉三角形其实就是一个二维表(数组)的下三角部分。,假设用二维数组yh存储,每行首尾元素都为1,且其 中任意一个非首尾元素yhi,j的值其实就是yhi-1,j-1 与yhi-1,j的和,另外每一行的元素个数刚好等于行 数。有了这些规律,给数组元素赋值就不难了,而要 打印杨晖三角形,只需控制一下每行输出的起始位置

9、 即可。,VarYh:Array110,110 Of Integer;I,J:Integer; BeginYh1,1:=1;For I:=2 To 10 DoBeginYhI,1:=1;YhI,I:=1;For J:=2 To I-1 DoYhI,J:=YhI-1,J-1+YhI-1,J;End;For I:=1 To 10 DoBeginWrite( :40-3*I);For J:=1 To I DoWrite(YhI,J:6);Writeln;End; End.,例3、猴子第1天摘下若干个桃子,当即吃了一半又一个。第2天又把剩下的桃吃了一半又一个,以后每天都吃前一天剩下的桃子的一半又一个,

10、到第10天猴子想吃时,只剩下一个桃子。 问猴子第1天一共摘了多少桃子?,问题分析:已知条件第 10 天剩下 1 个桃子,隐含条件每一次前一天的桃子个数等于后一天桃子的个数加 1 的 2 倍。我们采取逆向思维的方法,从后往前推,可用倒推法求解。,VarS,I:LongInt; BeginS:=1;第10天只有一个桃子For I:=9 DownTo 1 DoS:=(S+1)*2;第10天依次求前一天的桃 Writeln(S); 子数 End.,例题3 : Hanoi塔问题 .Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图1所示。要求把a柱上

11、n个圆盘按下述规则移到c柱上:(1)一次只能移一个圆盘;(2)圆盘只能在三个柱上存放;(3)在移动过程中,不允许大盘压小盘。问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?,a b c,分析,2,1,3,当n=1时:AC 当n=2时:AB,AC,BC 当n=3时:,分析,设f(n)为n 个盘子从1柱移到3柱所需移动的最少盘次。 当n=1时,f(1)=1。 当n=2时,f(2)=3。 以此类推,当1柱上有n(n2)个盘子时,我们可以利用下列步骤: 第一步:先借助3柱把1柱上面的n-1个盘子移动到2柱上,所需的移动次数为f(n-1)。 第二步:然后再把1柱最下面的一个盘子移动到3柱上,只需要1次盘子。 第三步:再借助1柱把2柱上的n-1个盘子移动到3上,所需的移动次数为f(n-1)。 由以上3步得出总共移动盘子的次数为:f(n-1)+1+ f(n-1)。 所以:f(n)=2 f(n-1)+1 hn=2hn-1+1 =2n-1边界条件:h1=1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报