递归(第二十四课).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
递归(第二十四课)

“ ” “ ” 递归 青奥赛辅导 引言 我们先来看看大家熟知的一个的故事: 从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事,他说从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事,他说…… 上面的故事本身是递归的,用递归算法描述: procedure bonze-tell-story; begin if 讲话被打断 then 故事结束 else begin 从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事; bonze-tell-story; end end; 从上面的递归事例不难看出,递归算法存在的两个必要条件: (1)??? 必须有递归的终止条件; (2)??? 过程的描述中包含它本身; 例6.24 植树节那天,有五位同学参加了植树活动,他们完成植树的棵数都不相同。问第一位同学植了多少棵时,他指着旁边的第二位同学说比他多植了两棵;追问第二位同学,他又说比第三位同学多植了两棵;…如此,都说比另一位同学多植两棵,最后问到第五位同学时,他说自己植了10棵。问第一位同学到底植了多少棵树? 【分析】把原问题求第一位同学的植树棵数a1转化为a1=a2+2,即求a2;而求a2又转化为a2=a3+2; a3=a4+2; a4=a5+2逐层转化为求a2,a3,a4,a5且都采用与求a1相同的方法,最后的a5为已知值,用a5=10返回到上一层并代入计算出a4;又用a4的值代入上一层去求a3; …,如此,直到求出a1。 因此: 10 (x=5) Ax= Ax+1 + 2 (x5) 其中求Ax+1 又采用求Ax 的方法。所以: ①定义一个处理问题的子程序Num(x),如果X 5就递归调用子程序Num(x+1); ②当递归调用到达一定条件(X=5),就直接执行num:=10,再执行后继语句,遇End返回到调用子程序的地方。 ③最后返回到开头的原问题,此时所得到的运算结果就是原问题Num(1)的答案。 程序如下: Program ex6_24_1; //采用函数编写 Function num(x:integer):integer; begin if x=5 then num:=10 //递归边界 else num:=num(x+1)+2; //递归式 end; BEGIN writeln(The Num is ,num(1)); END. 利用全局变量或变参的形式,也可以传递数据,下面采用过程编写。 程序如下: Program ex6_24_2; //采用过程编写 Var a: integer; //定义一个全局变量a,通过全局变量传递数值 Procedure Num(x: integer); //过程Num(x)求第x位同学的棵数 begin if x=5 then a:=10 else begin Num(x+1); //递归调用过程Num(x+1) a:=a+2; //求(x+1)的棵数 end; end; BEGIN Num(1); //主程序调用Num(1)求第1个人的棵数 writeln(’The Num is ’, a); END. Ex6_24_2程序中的递归过程图解如下: 递归方法说明如下: ①调用原问题的处理子程序(过程或函数)时,调用程序应给出具体的子程序形参值(与形参结合的实参); ②在处理子问题中,如果又调用原问题的处理子程序,但形参值应是不断改变的量(表达式); ③每递归调用一次自身,系统就打开一“层”与自身相同的程序系列; ④由于调用参数不断改变,将使条件满足,此时就是最后一“层”,不需再调用自身,而是在本层往下执行后继语句,遇到end,就返回到上“层”调用此子程序的地方并继续往下执行,如此直到返回主程序。 ⑤整个递归过程可视为由往返双向“运动”组成,先是逐层递进,逐层打开新的“篇章”,(有可能无具体计算值)当最终递进达到边界,执行完本“层”的语句,才由最末一“层”逐次返回到上“层”,每次返回

文档评论(0)

dajuhyy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档