- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用递归的思想建立递推关系
递归的概念与基本思想 采用递归方法编写的问题解决程序具有结构清晰,可读性强等优点,且递归算法的设计比非递归算法的设计往往要容易一些,所以 当问题本身是递归定义的,或者问题所涉及到的数据结构是递归定义的,或者是问题的解决方法是递归形式的时候,往往采用递归算法来解决。 递归可以转化为非递归 递归转化为非递归的方法有很多,最标准的方法就是利用栈来实现。关键在于我们要掌握递归算法的实质:重复执行相同的算法,但其处理的数据发生了变化,因此对许多递归程序,我们可以用循环结构来完成,只要处理好变量、地址等关系就可以将递归转化为非递归。 递归的基本思想 一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。因此,在考虑使用递归算法编写程序时,应满足两点: 1)该问题能够被递归形式描述;(且是有限次的) 2)存在递归结束的边界条件。 递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。 但在用递归算法时,只要输入的n值稍大,程序求解就很困难, 而递推则效率高很多。如果将自然数n的范围扩大到1500以内,则用递归算法递归调用的次数过多,在求800以上的数的时候就会出现困难,但用递推却可以大大缩小问题的规模。 var f0,f1,f2:real; ??? i,n:byte; begin ??? readln(n); ????f0:=1;f1:=2; ????for i:=2 to n do ???? begin ????????? f2:=f0+f1; ????????? f0:=f1; ????????? f1:=f2 ???? end; ????writeln(f2:1:0) end. 常见错误 明确递归关系后,在编写程序时加入循环之类的语句以“帮助”程序完成本应由递归调用来实现的功能,以致画蛇添足,造成程序出错。 这时不论递归关系复杂与否,在编写递归程序时都应牢记以下原则: 首先,递归调用时问题的性质应相同; 其次,对过程中的递归调用只需看成一个简单的操作,切勿想得过深、过远。 应确信只要严格定义递归函数或过程的功能和接口,就必然能实现相应的功能。 请比较以下程序段(求第n个斐波那契数) * * 递归策略 递归的概念与基本思想 一个函数、过程、概念或数学结构,如果在其定义或说明内部又直接或间接地出现有其本身的引用,则称它们是递归的或者是递归定义的。在程序设计中,过程或函数直接或者间接调用自己,就被称为递归调用。 递归的概念与基本思想 递归过程是借助于一个递归工作栈来实现的 问题向一极推进,这一过程叫做递推; 而问题逐一解决,最后回到原问题,这一过程叫做回归。 递归的过程正是由递推和回归两个过程组成。 递归的概念与基本思想 用递归算法求 n! 定义:函数 fact( n ) = n! fact( n-1 ) = ( n-1 )! 则有 fact( n ) = n *fact( n-1 ) 已知 fact( 1 ) = 1 练习写出相应的代码 * 下面画出了调用和返回的递归示意图 递归的概念与基本思想 递归实现的代价是巨大的栈空间的耗费,那是因为过程每向前递推一次,程序将本层的实在变量(值参和变参)、局部变量构成一个“工作记录”压入工作栈的栈顶,只有退出该层递归时,才将这一工作记录从栈顶弹出释放部分空间。由此可以想到,减少每个“工作记录”的大小便可节省部分空间。例如某些变参可以转换为全局变量,某些值参可以省略以及过程内部的精简。 递归的概念与基本思想 示例:求a[1..n]的最大者。 有如下过程: Procedure findmax(i:integer;var max:integer); var j:integer; begin max:=a[i]; if i=n then exit else begin findmax(i+1,j); if jmax then max:=j; end; end; 递归的概念与基本思想 起始状态就是调用findmax(1,max),而像上述过程中的变参max完全可以省略。将上述方法修改可得下面的算法: Procedure findmax(i:integer); begin if i=n then exit else begin findmax(i+1); if a[i]max then max:=a[i]; end; end; 递归的概念与基本思想 起始状态就是调用findmax(
您可能关注的文档
最近下载
- 立创EDA操作手册公开课.pdf
- 《共享单车点位设置导则》.pdf VIP
- 体育概论 第三版 杨文轩 陈琦 全国普通高等学校体育专业类基础课程教材-第二章 体育功能.ppt VIP
- 湖南省新高考教学教研联盟暨长郡二十校联盟2024-2025学年高一下学期5月检测数学试卷含答案.docx VIP
- 2025老年人健康膳食指南(精华版).pptx
- 体育概论 第三版 杨文轩 陈琦 全国普通高等学校体育专业类基础课程教材-第四章 体育过程.ppt VIP
- 沙场供沙合同范本.docx VIP
- 八年级上册物理同步练习题(全)-人教版.doc VIP
- 基孔肯雅热防控技术指南2025年版培训课件.pptx VIP
- 《创意综合材料绘画》课件.ppt VIP
文档评论(0)