网站大量收购独家精品文档,联系QQ:2885784924

第5章 递归教学课件.pptx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 递归吃货办席,要把大块肉弄熟,但锅儿只有那么大,一次性装不下怎么办?难不倒吃货!吃货把大块肉分成很多小块肉,再用小竹篮打包,批量放入锅里蒸烤,直到所有肉蒸烤完。原来大问题分解为若干个小问题,所有小问题解决了,大问题也就解决了,这是递归思想。本章讲解递归。要求理解递归概念,掌握建递归模型,灵活应用递归解决复杂问题。提纲5.1 递归概念和原理 5.2 递归模型5.3 递归算法应用5.4 递归学习总结5.1 递归概念和原理1.定义在定义一个过程或函数时出现调用本过程或本函数的成分,称为递归。5.1 递归概念和原理举例:小口瓶子装了大半瓶碎石头,要将所有石头倒出来,试了几次都堵在瓶口了。慢慢倾斜慢慢倒,一颗一颗倒,最终全部倒出来了。在这个例子中,全部石头倒出来是大问题,倒一颗石头是与大问题相似的小问题,所有小问题解决了,大问题也就解决了,这就是一种递归思想。5.1 递归概念和原理递归思想的本质是将1个复杂的大问题,通过层层分解,分解为若干个简单的又与大问题相似的小问题,所有小问题解决了,大问题也就解决了。5.1 递归概念和原理2.工作栈递归算法在系统内部的执行是通过1个工作栈来实现的,工作栈工作原理:执行开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址。每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址进栈。每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。5.1 递归概念和原理递归过程实质上分为分解过程和返回过程,如图5.1所示求5!。5.1 递归概念和原理【算法5.1】简单的递归求和。思路:利用递归调用完成求和。代码见算法5.15.1 递归概念和原理3.应用条件满足下面3个条件可以运用递归算法解决问题。(1)大问题可以转化为若干个小问题来求解,而这些小问题的求解 方法与大问题相似,只是在数量规模上不同。(2)递归调用的次数必须是有限的。(3)必须有结束递归的条件来终止递归。5.1 递归概念和原理4.应用场景递归算法的应用,往往有下面3种情形可应用递归算法解决问题。(1)定义是递归的。如许多数学公式、数列等的定义是递归的。例如,求n!和Fibonacci(斐波那契)数列等。(2)数据结构是递归的。如单链表结点结构,其内指针域又是1个单链表结点。(3)求解问题的方法是递归的。如求解汉诺塔问题,多级目录查找文件问题,等。5.2 递归模型?递归模型是递归算法的抽象,它反映一个递归问题的递归结构。递归模型包括递归出口和递归体两部分。递归出口是递归结束的条件;递归体确定递归求解时的递推关系。数学建模如下:其中g()函数为非递归函数。而大问题分解出了与大问题相似的小问题。5.2 递归模型5.2 递归模型【思考与练习5.2】下面问题的求解,请写出递归模型。求n!求数组a[0...n-1]中的最大值。求Fibonacci数列。单链表的遍历。5.2 递归模型?答:(1) (2)(3)(4) ()5.3 递归算法应用【例5.1】创建并初始化1个不带头结点的单链表,分别对该单链表正向和反向输出其所有结点。思路:(1)设f(p)为正向输出单链表所有结点(a1...an),是大问题,显然f(p.next)输出(a2...an)是小问题,当p为null时不做任何事。5.3 递归算法应用?如图5.5所示,所以递归模型如下: (代码见应用5.1) 5.3 递归算法应用思路:(2)设g(p)为反向输出单链表所有结点(an...a1),是大问题,显然f(p.next)输出(an...a2)是小问题,当p为null时不做任何事。与正向输出不同的是,先让p移动,再输出p结点。5.3 递归算法应用?如图5.6所示,所以递归模型如下: (代码见应用5.1)5.3 递归算法应用【进一步思考】正反向遍历顺序表,也可以用递归算法实现吗,为什么?答:可以。同例5.1算法,大问题可以分解为相似的问题,如a[0...n-1]是大问题,a[1...n-1]/a[0...n-2]是小问题。5.3 递归算法应用?【例5.2】用递归算法求解汉诺塔问题。思路:设f(n,X,Y,Z)表示n个盘片从X塔座借助Y塔座移到Z塔座上,显然f(n-1,X,Y,Z)是小问题,所以递归模型如下: 代码见应用5.25.3 递归算法应用【进一步思考】在分析递归和非递归算法时空复杂度时,有什么不同的考虑?答:在分析非递归算法时,主要看时间频度与问题规模之间的关系,算法的主要语句执行的次数来确定之,辅助变量与问题规模是否相关;在分析递归算法时,要考虑嵌套调用次数以及递归栈所需空间,即要计算时间和空间的递推式,如例5.2算法中通过时间和空间递推式计算出递归算法的时间和空间复杂度。 5.3 递归算法应用

文档评论(0)

弹弹 + 关注
实名认证
内容提供者

人力资源管理师、教师资格证持证人

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

版权声明书
用户编号:6152114224000010
领域认证该用户于2024年03月13日上传了人力资源管理师、教师资格证

1亿VIP精品文档

相关文档