- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.5用递归法解决问题讲解
第三章 算法的程序实现 3.5 ?用递归法解决问题 教学重点 教学难点 (1)递归过程思路的建立。 (2)判断问题是否适于递归解法。 (3)正确写出递归程序。 递归算法 递归算法作为计算机程序设计中的一种重要的算法,是较难理解的算法之一。 简单地说,递归就是编写这样的一个特殊的过程,该过程体中有一个语句用于调用过程自身(称为递归调用)。 递归过程由于实现了自我的嵌套执行,使这种过程的执行变得复杂起来,其执行的流程可以用图1所示。 递归算法 调用子程序的含义 在过程和函数的学习中,我们知道调用子程序的一般形式是:主程序调用子程序A,子程序A调用子程序B,如图如示,这个过程实际上是 递归的定义: 一个函数在定义时, 地调用了自己,这种算法在程序设计中统称为递归法。 递归算法 分析: 可以推出下列式子: 小结: 递归算法的实质: 是把问题转化为规模缩小了的同类问题的子问题。 然后递归调用函数(或过程)来表示问题的解。 一个应用递归算法解决的问题经典例子 传说在古代印度的贝拿勒斯神庙,有一块黄铜板上插了3根宝石柱,在其中一根宝石柱自上而下由小到大地叠放着64个大小不等的金盘。一名僧人把这些金盘从一根宝石柱移到另外一根上。僧人在移动金盘时遵守下面3条规则: 第一,一次只能移动一个金盘。 第二,每个金盘只能由一根宝石柱移到另外一根宝石柱。 第三,任何时候都不能把大的金盘放在小的金盘上。 神话说,如果僧人把64个金盘完全地从一根宝石移到了另外一根上,世界的末日就要到了。当然,神话只能当故事来听,世界不可以因为个别人的活动而导致末日。不过,从僧人搬完64个金盘所需时间的角度来说,即使僧人每秒都能移动一个金盘,那也得要几千亿年! 分析问题 我们把3根宝石柱分别命名为A、B、C。最初有N个金盘放在A,需要把它们全部按规则移动到B。当N=1时,直接把金盘从A搬到B就可以了,1次成功。当N≥2,那么需要利用C柱来过渡。我们假设已经找到一种把N-1个金盘从一根柱搬到另外一根柱的方法,那么,我们只要把N-1个金盘从A搬到C,然后把最大的金盘从A搬到B,最后把C上的N一1个金盘搬到B就可以了。靠递归的思想,我们轻而易举地完成了整个搬动。 设计算法 我们定义一个过程Hanoi(N,A,B,C),表示有N个金盘需要从A柱搬到B柱(以C柱为过渡)。那么完成它只需3步: ①Hanoi(N一1,A,C,B)它的意思是把A柱上的N一1个金盘搬到C柱; ②?A→B?它的意思是把一个(最大的)金盘从A柱搬到B柱; ③?Hanoi(N-1,C,B,A)它的意思是把c柱上的N一1个金盘搬到B柱。 子程序 Private Sub Hanoi(n As Integer, ByVal A As String, ByVal B As String, ByVal C As String, t As Long) If n = 1 Then Text3.Text = Text3.Text + A + → + B + “ “ t = t + 1 增加变量t用来统计移动次数。 Else ? Call Hanoi(n - 1, A, C, B, t) ? Text3.Text = Text3.Text + A + → + B + “ ” ? t = t + 1 ? Call Hanoi(n - 1, C, B, A, t) End If End Sub 主程序 Private Sub Command1_Click() ? Dim t As Long, n As Integer ? t = 0 ? n = Val(Text1.Text) ? A = A“:? B = B“:? C = C ? Call Hanoi(n, A, B, C, t) ? Text2.Text = t End Sub 小结 递归算法所体现的“重复”一般有三个要求: 一、是每次调用在规模上都有所缩小(通常是减半); 二、是相邻两次重复之间有紧密的联系,前一次要为后一次做准备; (通常前一次的输出就作为后一次的输入) 三、是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的。 (以规模未达到直接解答的大小为条件,无条件递归调用将会成为死循环而不能正常结束 ) * * (1)了解递归现象和递归算法的特点 (2)自定义函数及递归算法的自定义函数实现 (3)培养 “自顶向下”、“逐步求精”的意识 函 数 A 函 数 B 类型二 函 数 A 类型一 直
您可能关注的文档
最近下载
- 2024年4月 全国高等教育自学考试真题 人员素质测评理论与方法 06090.doc VIP
- 路基挡土墙专项施工方案 - 大模板.docx VIP
- 一种可连续工作的氦气纯化器与纯化方法.pdf VIP
- 抢救药品相关试题(附答案).docx VIP
- 施工现场机械设备检查技术规范 JGJ 160-2016知识培训.pptx
- 2017年版2020年修订普通高中语文课程标准解读与培训课件.pptx VIP
- (人教2024版新教材)英语四年级上册Unit4.2 Part A Let’s learn&Match, act and guess课件.pptx
- 2025届高考散文一轮整体复习:写人叙事类散文——《放牛记》全文详解+课件.pptx VIP
- 热力管道工程质量保证措施和体系.pdf VIP
- 黄帝内经的临床医学理论.PPT VIP
文档评论(0)