数据结构与算法课程报告-递归算法的原理与应用举例.docVIP

数据结构与算法课程报告-递归算法的原理与应用举例.doc

  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文档。上传文档
查看更多
数据结构与算法课程报告-递归算法的原理与应用举例

数据结构与算法课程报告 递归算法的原理与应用举例 学号 姓名 班级 2011级电子2班 华侨大学电子工程系 递归算法原理与介绍 1、递归算法的介绍与简要分析 递归是解决一类问题的重要方法。递归算法是算法设计中常用的一种方法,它可以解决具有递归属性的问题,并且是行之有效的。递归算法结构清晰,而且容易用数学归纳法来证明算法的正确性等优点,因此它为设计算法、调试程序带?来很大方便。我们先举一个简单的例子来说明。? 我们知道,在数学中N!一般定义为:N=1*2*3*…*(N-1)*N?但也可以用下面公式来定义:{若N=0???N!=1;若N0???N!=?N*(N-1)!}? 在N0的公式中,又包括了(N-1)!,这就是N!的递归定义。?? 一般说,如果一个对象部分的有自己组成,或者是按他自己定义的,则称之为是递归的。?递归在数学和计算机学科中经常遇到。利用递归方法可以用有限的语句来定义无限集合,但在递归定义中至少要有一条是非递归的,即初始定义。否则就会产生逻辑性错误。?? 在计算机科学中,递归概念还经常用于递归调用方面,即函数或过程自己调用自己。用递归调用的算法就是递归算法。?递归调用会产生无终止运算的可能性,因此必须在适当的情况下终止递归调用(也叫做边界条件)。根据递归定义设计的递归算法中,非递归的初始定义就用做程序的终止条件。? 递归算法就是算法中有直接或间接调用算法本身的算法。递归算法的要点是:? (1)递归就是在过程或函数里调用自身。?(2)问题具有类同自身的子问题的性质,被定义项在定义中的应用具有更小的尺度。?(3)被定义项在最小尺度上有直接解。?(4)在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。 ? 归算法设计的原则是用自身的简单情况来定义自身,一步比一步更简单,确定递归的控制条件非常重要。设计递归算法的方法是:? (1)寻找方法,将问题化为原问题的子问题的求解。?(2)设计递归出口,确定递归终止条件。? 2.递归算法的特点 递归就是在过程或函数里调用自身 。 递归程序在执行过程中总是不断地调用自身, 而每次调用自身时, 通常在规模上都有所缩小, 当问题的规模缩小到某一值时就可以直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件), 而且相邻两次调用之间有紧密的联系, 前一次要为后一次做准备 (通常前一次的输出就作为后一次的输入), 在使用递归策略时, 必须有一个明确的递归结束条件, 也称为递归出口 。 递归算法一般用于解决三类问题: (1)数据的定义是按递归定义的, 如 Fibonacci函数 。 (2)问题解法按递归算法实现, 如回溯问题 。 (3)数据的结构形式是按递归定义的, 如树的遍历, 图的搜索等 。 递归算法设计的基本思想是: 对于一个复杂的问题, 把原问题分解为若干个相对简单的同类子问题, 继续下去直到子问题简单到能够直接求解, 也就是说到了递归的出口, 这样原问题就有递推得解 。 所以在使用递归算法时, 首先要弄清楚简单情况下的解法, 然后弄清楚如何把复杂情况归纳为更简单的情况 。 3.递归算法的分类 递归算法一般通过函数或子过程来实现 。 在函数或子过程的内部,直接或者间接地调用自己的算法 。 所以根据递归算法的表示形式, 可以将递归算法分为递归函数和递归子过程两种; 根据递归算法调用的形式可以有直接递归和间接递归两种 。 如图所示是直接递归和间接递归调用过程的示意图 。 二、?递归算法的应用? (一)?汉诺塔问题? 有三根针?A、B、c。A针上有,1个盘子,大的在下,小的在上,要求把这,1个盘子从A针移到?c针,在移动的过程中可以借助B针,每次只允许移动一个盘子,且在移动过程中在三根针上都保持?大盘在下,小盘在上。?? 关于这个递归问题的实例,教材与一般文献中都是直接介绍移动11,个盘子的算法。对学生来说,一个?不确定的数n,概念上太抽象,对算法的理解、依据算法编程带来很大难度。在教学过程中,笔者先从一个?确定的数字(n=3)来分析移动过程,模拟程序的执行过程。?? 假设?A针上有?3个(编号为?I、Ⅱ、Ⅲ)的盘子移到?C针上?,现来看一下解决问题的步骤:?? (1)将A针上2个(编号为?I、Ⅱ)盘子移到B针上(借助?c针):? 1)将A针上?I号盘子移到c针上?2)将?A针上Ⅱ号盘子移到?B针上?3)将?C针上?I号盘子移到?B针上?(2)将A针上Ⅲ号盘子移到c针上。?? (3)将B针上2个(编号为I、Ⅱ)盘子移到?c针上(借助A针):? 1)将?B针上?I号盘子移到?A针上??2)将?B针上?Ⅱ号盘子移到?C针上?3)将?A针上?I号盘子移到?C针上?? 上述3个

文档评论(0)

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

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

1亿VIP精品文档

相关文档