- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PASCAL第讲递归.ppt
递归 * * 递归的定义 所谓递归就是一个函数或过程可以直接或间接地调用自己。 前面多次提到的求N!的问题。 我们知道:当N0时,N!=N*(N-1)!,因此,求N!的问题化成了求N*(N-1)!的问题,而求(N-1)!的问题又与求N!的解法相同,只不过是求阶乘的对象的值减去了1,当N的值递减到0时,N!=1,从而结束以上过程,求得了N!的解。 也就是说,求解N!的过程可以用以下递归方法来表示: 在这里,为了定义n!,就必须先定义(n-1)!,为了定义(n-1)!,又必须先定义(n-2)!……,上述这种用自身的简单情况来定义自己的方式称为递归定义。 一个递归定义必须是有确切含义的,也就是说,必须一步比一步简单,最后是有终结的,决不允许无限循环下去。 上面的例子中,当N=0时定义一个数1,是最简单的情况,称为递归的边界,它本身不再使用递归定义。 与递推一样,每一递归都有其边界条件。但不同的是,递推是由边界条件出发,通过递推式来求值,而递归则是从自身出发来达到边界条件。 递归的调用 在Pascal程序中,子程序可以直接自己调用自己或间接调用自己,则将这种调用形式称之为递归调用。 其中,我们将前者的调用方式称为简单递归,后者称为间接递归。由于目前我们介绍、掌握的知识尚还无法实现间接递归,只有留待在以后的内容中我们再作介绍。本节只介绍直接递归。 递归调用时必须符合以下三个条件: (1)可将一个问题转化为一个新的问题,而新问题的解决方法仍与原问题的解法相同,只不过所处理的对象有所不同而已,即它们只是有规律的递增或递减。 (2)可以通过转化过程使问题回到对原问题的求解。 (3)必须要有一个明确的结束递归的条件,否则递归会无止境地进行下去。 下面我们通过一些例子,来解释递归程序的设计。 program aa; var t:longint; n:integer; function fac(n:integer):longint; begin if n=0 then fac:=1 else fac:=fac(n-1)*n; end; 例1:按照以上的分析,用递归的方法来求N!的解。 程序如下: 测试数据: 输入: input n=5 输出: 5! =120 begin write(input n=); read(n); if n0 then writeln(n0,data errer) else begin t:=fac(n); writeln(n,! =,t) end end. 如图展示了程序的执行过程: 在这里,因为函数FAC的形参是值形参,因此每调用一次该函数,系统就为本次调用的值形参N开辟了一个存储单元,以便存放它的实参的值。也就是说,对于递归函数或递归过程,每当对它调用一次时,系统都要为它的形式参数与局部变量(在函数或过程中说明的变量)分配存储单元(这是一个独立的单元,虽然名字相同,但实际上是互不相干的,只在本层内有效),并记下返回的地点,以便返回后程序从此处开始执行。 例2:利用递归,将一个十进制整数K转化为N进制整数(N=10)。 测试数据: 输入:K和N的值 19 3 输出:转化后的N进制整数 201 program aa; var n,k:integer; procedure tentok(k,n:integer); var r:integer; begin r:=k mod n; k:=k div n; if k0 then tentok(k,n); write(r); end; begin read(k,n); tentok(k,n); writeln; end. 递归的一般适合场合 1.数据的定义形式是按递归定义的. 如:裴波那契数列的定义为: Fn=Fn-1+Fn-2 F1=0 F2=1 begin read(n); s:=fib(n); writeln(s); end. 测试数据: 输入: 5 输出: 3 program aa; var n:integer; s:longint; Function FIB(N:integer):integer; Begin If n=1 then FIB:=0 Else if n=2 then FIB:=1 El
您可能关注的文档
- Java程式语言方法与方法库产生.ppt
- JAVA第一章a.ppt
- java第九章多线程.ppt
- Java第九章常用类.ppt
- JAVA第二章理解类的定义.ppt
- Java第十二章多线程.ppt
- JAVA第章.ppt
- Java第章继承与多态.ppt
- java第讲多线程程序设计.ppt
- Java算法第9章.ppt
- 汉服产品在线展示效果用户体验研究报告.docx
- 2030年储能产业环保效益与绿色低碳发展研究报告.docx
- 小学科学合理利用能源课件ppt.pptx
- 供应链金融在中小微企业融资中的金融科技应用报告.docx
- 2025年济南四建集团有限责任公司校园招聘笔试备考题库及答案详解(夺冠系列).docx
- 初中生英语阅读教学中的语篇分析与评价教学研究课题报告.docx
- 基于云计算的软件开发平台在云医疗服务中的应用与架构设计教学研究课题报告.docx
- 汉服产品在线销售2025年用户互动分析报告.docx
- 《金融科技背景下商业银行风险管理的创新实践与风险控制效果创新》教学研究课题报告.docx
- 初中英语教学:牛顿望远镜下的英语科普阅读与写作教学研究课题报告.docx
最近下载
- 幼儿园红色文化教学案例.docx VIP
- 幼儿园“红色教育主题活动案例.pdf VIP
- 模拟法庭剧本(终极完美版).doc
- 专题12 句子的类型II(复合句)-初中英语重点语法知识完整梳理(全国通用).doc VIP
- 酒店住宿水单模板.doc VIP
- 专题10 非谓语动词-初中英语重点语法知识完整梳理(全国通用).doc VIP
- 专题11 句子的类型I(简单句和并列句)-初中英语重点语法知识完整梳理(全国通用).doc VIP
- 新中式设计方案说明书.docx VIP
- 专题09 动词的时态和语态-初中英语重点语法知识完整梳理(全国通用).doc VIP
- 专题08 动词的分类-初中英语重点语法知识完整梳理(全国通用).doc VIP
文档评论(0)