6第六章递归运算.docxVIP

  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文档。上传文档
查看更多
6第六章递归运算

第六章程序设计与基本算法学习计算机语言不是学习的最终目的。语言是描述的工具,如何灵活地运用语言工具,设计和编写能解决实际问题的程序,算法是程序设计的基础。算法的作用是什么呢?著名数学家高斯(GAUSS)从小就勤于思索。1785年,刚上小学二年级的小高斯,对老师出的计算题S=1+2+3+…+99+100,第一个举手报告S的结果是5050。班上的同学都采用依次逐个相加的“算法”,要相加99次;而小高斯则采用首尾归并,得出S=(1+100)*50的“算法”,只需加一次和乘一次,大大提高了效率。可见,算法在处理问题中的重要性。学习计算机编程,离不开基本算法。刚开始学习程序设计时,就应注重学习基本算法。第一节 递推与递归算法?递推和递归是编程中常用的基本算法。在前面的解题中已经用到了这两种方法,下面对这两种算法基本应用进行详细研究讨论。?一、递推递推算法是一种用若干步可重复的简单运算(规律)来描述复杂问题的方法。?[例1] 植树节那天,有五位参加了植树活动,他们完成植树的棵数都不相同。问第一位同学植了多少棵时,他指着旁边的第二位同学说比他多植了两棵;追问第二位同学,他又说比第三位同学多植了两棵;…如此,都说比另一位同学多植两棵。最后问到第五位同学时,他说自己植了10棵。到底第一位同学植了多少棵树?解:设第一位同学植树的棵数为a1,欲求a1,需从第五位同学植树的棵数a5入手,根据“多两棵”这个规律,按照一定顺序逐步进行推算:??? ①a5=10;??? ②a4=a5+2=12;??? ③a3=a4+2=14;??? ④a2=a3+2=16;??? ⑤a1=a2+2=18;Pascal程序:? Program Exam1;??? Var i, a: byte;????? begin???????? a:=10;???????????? ?{以第五位同学的棵数为递推的起始值}???????? for i :=1 to 4 do? ?{还有4人,递推计算4次}??????????? a:= a+2;?????? ?{递推运算规律}???????? writeln(’The Num is’, a);???????? readln????? end.本程序的递推运算可用如下图示描述: ??? 递推算法以初始{起点}值为基础,用相同的运算规律,逐次重复运算,直至运算结束。这种从“起点”重复相同的方法直至到达一定“边界”,犹如单向运动,用循环可以实现。递推的本质是按规律逐次推出(计算)下一步的结果。二、递归递归算法是把处理问题的方法定义成与原问题处理方法相同的过程,在处理问题的过程中又调用自身定义的函数或过程。仍用上例的计算植树棵数问题来说明递归算法:解:把原问题求第一位同学在植树棵数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。因此:?????????? 其中求a x+1 又采用求ax 的方法。所以:①定义一个处理问题的过程Num(x):如果X 5就递归调用过程Num(x+1);②当递归调用到达一定条件(X=5),就直接执行a :=10,再执行后继语句,遇End返回到调用本过程的地方,将带回的计算结果(值)参与此处的后继语句进行运算(a:=a+2);③最后返回到开头的原问题,此时所得到的运算结果就是原问题Num(1)的答案。Pascal程序:?Program Exam1_1;?? Var a: byte;?? 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);? readlnend.?? 程序中的递归过程图解如下:  参照图示,递归方法说明如下:①调用原问题的处理过程时,调用程序应给出具体的过程形参值(数据);②在处理子问题中,如果又调用原问题的处理过程,但形参值应是不断改变的量(表达式);③每递归调用一次自身过程,系统就打开一“层”与自身相同的程序系列;④由于调用参数不断改变,将使条件满足(达到一定边界),此时就是最后一“层”,不需再调用(打开新层),而是往下执行后继语句,给出

文档评论(0)

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

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

1亿VIP精品文档

相关文档