- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机程序设计基础——第六讲
计算机程序设计基础 第六讲 递归 3. 先看简单情况,河中无柱子:S=0, Jump(0,y) 当y=1时,Jump(0,1)=2; 说明:河中有一片荷叶,可以过两只青蛙,起始时L上有两只青蛙,1#在2#上面。 第一步:1# 跳到荷叶上; 第二步:2# 从L直接跳至R上; 第三步:1# 再从荷叶跳至R上。 如下图: * * 递归算法在可计算性理论中占有重要地位,它是算法设计的有力工具,对于拓展编程思路非常有用。就递归算法而言并不涉及高深数学知识,只不过初学者要建立起递归概念不十分容易。 我们先从一个最简单的例子导入。 递归及其实现 用递归算法求n! 定义:函数 fact(n) = n! fact(n-1) = (n-1)! 则有 fact(n) = n fact(n-1) 已知 fact(1) = 1 为了表述得直观清晰,我们定义两个结点:或结点与与结点。 图示的直观性与思维助力。 1、或结点 A为“或结点”,A依不同条件会有两种不同的取值B或C。结点用 表示。 如果有多于2种取值,可用下图: 条件为Z1, Z2, …,Zn,取值为B或C,…或G 2、与结点 与结点要涂黑,相关联的B与C之间要用弧线连起来。 A为与结点,A的最终取值为C结点的值,但为了求得C的值,得先求出B结点的值,C是B的函数。 仍以求n!为例画出如下与或图 A为或结点;B为直接可解结点,值为1; C为与结点,当n1时,A的取值即C的值,而C的值即E的值,为了求得E的值,需要先求出D的值。D值fact(n-1)乘以n即为E的值。 与结点可能有多个相关联的点,这时可描述为下图 A结点的值最终为D的值,但为了求D需先求B和C。从图上看先求左边的点才能求最右边的点的值,我们约定最右边D点的值就是A结点的值。 下面我们以3!为例来画与或结点图,目的是体会递归的含义。 C = 1 D = 2*C = 2 B = D = 2 E = 3*B = 3*2 = 6 A = E = 6 下面画出了调用和返回的递归示意图 从图可以想象: 欲求fact(3),先要求fact(2);要求fact(2)先求fact(1)。就象剥一颗圆白菜,从外向里,一层层剥下来,到了菜心,遇到1的阶乘,其值为1,到达了递归的边界。然后再用fact(n)=n*fact(n-1)这个普遍公式,从里向外倒推回去得到fact(n)的值。 为了把这个问题说得再透彻一点。我们画了如下的流程图: 为了形象地描述递归过程,将上图改画成下图 在这个图中“内层”与“外层”有着相同的结构。它们之间“你中有我,我中有你”,呈现相互依存的关系。 为了进一步讲清递归的概念,将递归与递推做一比较。仍以求阶乘为例。 递推是从已知的初始条件出发,逐次去求所需要的阶乘值。 如求3! 初始条件 fact(1) = 1 fact(2) = 2*fact(1) = 2 fact(3) = 3*fact(2) = 6 这相当于从菜心“推到”外层。而递归算法的出发点不放在初始条件上,而放在求解的目标上,从所求的未知项出发逐次调用本身的求解过程,直到递归的边界(即初始条件)。就本例而言,读者会认为递归算法可能是多余的,费力而不讨好。但许多实际问题不可能或不容易找到显而易见的递推关系,这时递归算法就表现出了明显的优越性。下面我们将会看到,递归算法比较符合人的思维方式,逻辑性强,可将问题描述得简单扼要,具有良好的可读性,易于理解,许多看来相当复杂,或难以下手的问题,如果能够使用递归算法就会使问题变得易于处理。下面举一个尽人皆知的例子哈诺(Hanoi)塔问题。 故事:相传在古代印度的Bramah庙中,有位僧子整天把三根柱子上的金盘倒来倒去,原来他是想把64个一个比一个小的金盘从一根柱子上移到另一根柱子上去。移动过程中恪守下述规则:每次只允许移动一只盘,且大盘不得落在小盘上面。有人会觉得这很简单,真的动手移盘就会发现,如以每秒移动一只盘子的话,按照上述规则将64只盘子从一个柱子移至另一个柱子上,所需时间约为5800亿年。 怎样编写这种程序?从思路上还是先从最简单的情况分析起,搬一搬看,慢慢理出思路。 1、在A柱上只有一只盘子,假定盘号为1,这时只需将该盘从A搬至C,一次完成,记为move 1 from A to C 2、在A柱上有二只盘子,1为小盘,2为大盘。 第(1)步将1号盘从A移至B,这是为了让2号盘能移动; 第(2)步将2号盘从A移至C; 第(3)步再将1号盘从B移至C; 这三步记为: move 1 from A to B; move 2 from A to C; move 3 form B to C; 3、在A柱
您可能关注的文档
最近下载
- 新22J01《工程做法》(新疆图集).pdf VIP
- 2015-2022年河北省专接本(专升本)《英语》真题合集.pdf VIP
- 【GB_T50779-2022 】石油化工建筑物抗爆设计标准.docx VIP
- 蓄电池内阻试验报告.docx VIP
- 《成本与管理会计(第4版)》习题答案 孙茂竹.pdf
- 劳动合同模板正规【5篇】.docx VIP
- 电气控制与PLC技术应用教学教案.docx VIP
- 22K311-5 防排烟系统设备及部件选用与安装.docx VIP
- 2025青海省从优秀村(社区)党组织书记中考录乡镇公务员32人笔试模拟试题及答案解析.docx VIP
- 最新河北省建设工程竣工验收报告6份(市政基础设施工程).pdf VIP
文档评论(0)