计算机算法设计与分析第三章 递归算法.pptVIP

计算机算法设计与分析第三章 递归算法.ppt

  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文档。上传文档
查看更多
* 3.1 递归算法实现机制 3.3 递归算法设计 第三章 递归算法 * 递归 定义 一个过程直接地或间接地调用自己,则称这个过程是递归的过程。 递归算法在计算机理论和实际应用中都具有重要意义 递归算法特征:有递归调用、有递归出口 设计和分析思路清晰,实现容易,效率较低 * 3.1 递归算法实现机制 子程序实现原理 子程序调用的形式 值回传方式 调用操作 递归程序实现原理 * procedure f(integer n) begin if (n=0) return 1 y ? f(n-1) return(n*y); end 递归求阶乘的算法 主程序: integer fn; fn ? f(4); * 为了保证递归调用的正确性,需要保存调用点的现场(返回地 址、局部变量、被调用函数的参数等),以便正确地返回,并且按 先进后出的原则来管理这些信息。高级语言编译程序是利用栈来实现的。 f(n) f(n-1) f(n-2) f(1) f(0) 调用时执行入栈操作保存现场,返回时执行出栈操作恢复现场 … 调用 返回 调用点 Pn Pn-1 Pn-2 P1 1 * 计算 4 ! 递归过程图示: 下图中 Pi 代表现场信息,栈元素由现场信息和参数构成 f(4)=4*f(3) f(3)=3*f(2) f(2)=2*f(1) f(1)=1*f(0) f(0)=1 Push(e4) Push(e3) Push(e2) Push(e1) f(4)= 4 * f(3) f(3)= 3 *f(2) f(2)= 2 *f(1) f(1)= 1 * f(0) =24 =6 =2 =1 P4 4 P3 3 P4 4 P2 2 P3 3 P4 4 P1 1 P2 2 P3 3 P4 4 Pop(e1) Pop(e2) Pop(e3) Pop(e4) * 3.3 递归算法设计 通用形式 实际上是分治策略 一些实例 * 例1.Hanoi问题:这是个组合数学中的著名问题。 N个圆盘依其半径大小,从下而上套在A柱上。每次只允许取一个移到柱B或C上,而且不允许大盘放在小盘上方。若要求把柱A上的n个盘移到C柱上请设计一种方法来,并估计要移动几个盘次。现在只有A、B、C三根柱子可用。 * Hanoi塔 要求: 1)每次只能移动一个盘子; 2)盘子可以放到ABC任何一个塔座上; 3)任何时候,都不能将较大的盘子压在较小的圆盘之上; * Hanoi问题是个典型的问题,第一步要设计算法,进而估计它的复杂性,估计工作量。 算法: N=2时 第一步先把最上面的一个圆盘套在B上                       第二步把下面的一个圆盘移到C上                       最后把B上的圆盘移到C上 到此转移完毕 A B C * 对于一般n个圆盘的问题, 假定n-1个盘子的转移算法已经确定。 先把上面的n-1个圆盘经过C转移到B。 第二步把A下面一个圆盘移到C上 最后再把B上的n-1个圆盘经过A转移到C上 A B C * 上述算法是递归的运用。n=2时已给出算法;n=3时,第一步便利用算法把上面两个盘移到B上,第二步再把第三个圆盘转移到柱C上;最后把柱B上两个圆盘转移到柱C上。N=4,5,…以此类推。 * 算法分析:令h(n)表示n个圆盘所需要的转移盘次。根据算法先把前面n-1个盘子转移到B上;然后把第n个盘子转到C上;最后再一次将B上的n-1个盘子转移到C上。 * 算法复杂度递归关系式为: h(1)=1 h(n)=2h(n-1)+1 求解后: h(n)=2n-1 * 递归关系式的求解方法: 1、迭代法(本课程需要掌握) 2、母函数法(简要介绍) 3、公式法求解k阶线性齐次 递归关系式

文档评论(0)

一壶清茶 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档