- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.8 递归算法实例及程序实现 1.递归算法的概念 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,称为递归算法。递归算法的基本思想是把规模较大的、较难解决的问题变成规模较小的、容易解决的同一问题,规模较小的问题又变成规模更小的问题,当问题小到一定程度时,可以直接得出它的解,从而得到原来问题的解。即采用“大事化小、小事化了”的基本思想。 诸如著名的汉诺塔问题、八皇后问题、斐波那契(Fibonacci)的兔子问题、猴子吃桃问题、年龄问题等都是递归问题。 VB允许一个自定义函数在函数体的内部调用自己,这样的函数就叫递归函数。 2.递归算法的实现要点 递归调用必须是有限制的,有限才有意义。所以在进行算法描述时必须设置相关的控制条件,使其成为有限。这可以通过条件语句(If语句)来实现,即只有在设定的条件成立时递归才继续,否则终止递归。可见,构成递归的必须满足以下条件: (1)有明确的结束递归的边界条件(又称终止条件)以及结束时的边界值; (2)函数的描述中包含其本身,即能用递归形式表示,且递归终止条件的发展。 3.递归算法的设计方法 当所求解问题难于直接求解时,首先,把问题分解成若干个难度较小、较容易求解的子问题,子问题与原问题具有类同的结构。如果子问题能够直接求解,则解之;如果子问题仍不能直接求解,将每个子问题再分解成若干个更简单的子问题,直到解出的子问题能够很容易地求解或解为已知,这是实现递归的模板。然后,设计递归出口(即结束递归的边界条件),在满足出口条件时,递归函数不能再调用自己,必须返回一个确定的值。将这两方面的问题分析好之后,就可以在程序体中定义递归调用了。 在通常情况下,递归调用都是要受到条件控制的,而且在被调用的过程中,会对调用条件进行有规律的修改,直到满足边界条件,返回边界值,结束递归;然后按原来的路径逐层返回,求出原问题的解。由此可知,递归算法的设计关键在于递归描述和递归终止条件。 如下图所示是递归算法调用过程示意图: 4.递归算法的实现过程 递归算法的过程是不断的自调用,直到到达递归出口才结束。然后,递归算法开始按最后调用的过程最先返回的次序逐层返回,返回到最外层的调用语句时递归算法执行过程结束。可见,递归的实现过程包含了“调用”和“返回”两个阶段。 许多问题都是可以利用递归算法进行求解的。VB中一个最常用的例子就是计算阶乘。例如,用递归函数实现计算机n!的求解。运行界面如下图所示。 代码如下: Private Sub Command1_Click() Dim n As Integer, m As Double n = Val(Text1.Text) m = f(n) Text2.Text = Str(n) + “的阶乘为” + Str(m) End Sub ? Function f(n As Integer) As Double If n = 1 Then f = 1 Else 参数n的值大于1 f = n * f(n - 1) 递归实现调用自身来计算f(n-1)的值 End If End Function 注:该示例程序在素材文件夹下vb36文件夹中。 本节的学习要求掌握递归算法的基本思想,掌握递归程序的实现要点。学会编写简单的递归函数。考查方式为选择题与填空题。 1.下列有关递归的说法,错误的是 ( ) A.递法算法的代码一般较少 B.递归算法一定要有终止条件 C.递归算法体现了大事化小的思想 D.递归函数中可以不包含条件控制语句 D 2.文本框对象Text1中的Text属性发生改变时,会驱动以下事件处理过程 Private Sub Text1_Change() If Len(Text1.Text) 8 Then Text1.Text = Text1.Text + Text1.Text End Sub 该过程体现的算法思想是 ( ) A.排序算法 B.递归算法 C.查找算法 D.解析算法 B 3.下列VB程序模块可以计算正整数n阶乘的值。 Function f(n As Integer) As Double If n = 1 Then f = 1 Else f = n * f(n - 1) End If End Function 该模块采用的是 ( ) A.查找算法 B.解析算法 C.递归算法 D.排序算法 C 4. 有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁,问第四个人岁数,他说比第3个人大2岁,问第三个人岁数,他说比第二个人大2岁,问第二个人岁数,他说比第1个人大2岁,问第1个人岁数
原创力文档


文档评论(0)