第6章-递归课件.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文档。上传文档
查看更多
递归调用的实现原理 递归工作栈是递归函数运行期间使用的数据存储区 每一次递归调用时,需要将实在参数、返回地址等信息传递给被调用函数保存,并且要保存被中断函数本层的参数和局部变量,以便从下一层返回时重新使用; 上述信息组成一个递归工作记录保存在递归工作栈中,按后进先出的原则组织。 局部变量 返回地址 参 数 递归 工作记录 活动记录框架 返回时,执行出栈操作,把当前栈顶保留的值送回相应的参数中进行恢复,并按栈顶中的返回地址,从断点处继续执行。 局部变量 返回地址 参 数 递归 工作记录 活动记录框架 递归算法设计先要给出递归模型,再转换成对应的C/C++语言函数。 6.3 递归算法的设计 例1:采用递归算法求实数数组A[0..n-1]中的最小值。 用函数f(A,i)求数组元素A[0]~A[i]中的最小值。 当i=0时,有f(A,i)=A[0]; 假设f(A,i-1)已求出,则f(A,i)=MIN(f(A,i-1),A[i]) 得到如下递归模型: A[0] 当i=0时 f(A,i)= MIN(f(A,i-1),A[i]) 其他情况 由此得到如下递归求解算法: float f(float A[],int i) { float m; if (i==0) return A[0]; else { m=f(A,i-1); if (mA[i]) return A[i]; else return m; } } * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 * 。。 第6章 递归 6.3 递归算法的设计 6.1 什么是递归 6.2 递归调用的实现原理 本章小结 6.1.1 递归的定义 在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。 若调用自身,称之为直接递归。 若函数p调用函数q,而q又调用p,称之为间接递归。 如果一个递归函数中递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。 6.1 什么是递归 例6.1 以下是求n!(n为正整数)的递归函数。 int fun(int n) { if (n==1) /*语句1*/ return 1; /*语句2*/ else /*语句3*/ return fun(n-1)*n; /*语句4*/ } 递归可以把一个大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解,通过少量的语句,实现重复计算。 体现了分而治之的算法思想 在以下3种情况下,常常要用到递归的方法。 1. 定义是递归的 2. 数据结构是递归的 例如,单链表就是一种递归的数据结构,其结点类型定义如下: typedef struct LNode { ElemType data; struct LNode *next; } LinkList; 该定义中,结构体LNode的定义中用到了它自身,即指针域next是一种指向自身类型的指针。 6.1.2 何时使用递归 求n!和Fibonacci数列 例:求一个不带头结点的单链表head的所有data域(假设为int型)之和。 int Sum(LinkList *head) { if (head==NULL) return 0; else return(head-data+Sum(head-next)); } 汉诺塔问题是印度的一个古老的传说。 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。 不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。 僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一

文档评论(0)

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

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

1亿VIP精品文档

相关文档