- 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.5 用递归法解决问题 什么是递归法 函数是为了实现某种功能而编写的一段相对独立的程序。 自定义函数: 在VB中,自定义函数形式如下: [Public|Private] Function 函数名称 ([参数列表]) [As 类型] 局部常量、变量定义 语句组 函数名称=返回值 End Function 自定义函数的调用,可以有三种格式: 变量=函数名称(参数) Call 函数名称(参数) 函数名称 参数 子过程的定义 Public Function max(n As Integer) As Integer If ab Then max=a Else max=b End If End Function Private Sub command_Click() 调用递归函数,显示结果 Print max(3,5) End Sub 基本思想: 把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定的程度直到可以直接得出它的解,从而得到原来问题的解。 注意:必须要有一个结束递归的条件,不得无限递归。 分析步骤: 1.决定问题规模的参数。 2.问题的边界条件及边界值。 3.解决问题的通式。 例:计算一个数的阶乘 1!=1 f(1)=1 2!=1*2 f(2)=f(1)*2 3!=1*2*3 f(3)=f(2)*3 4!=1*2*3*4 f(4)=f(3)*4 5!=1*2*3*4*5 f(5)=f(4)*5 ……. …….. n!=1*2*3*4*5*….*n f(n)=f(n-1)*n 递归函数求5! Public Function s(n As Integer) As Long If n = 1 Then s =1 Else s =s(n-1)*n End If End Function Private Sub form_Click() 调用递归函数,显示结果 Print s(5)=; s(5) End Sub 递归法的实现 有人养了一对兔子,这对兔子以后每月生一对兔子,新生兔子从第三个月开始,也是每月生一对兔子,问12个月后这人有多少对新生兔子? 问题分析 程序实现 这个问题如果不用递归法解决,其参考代码如下: Private Function Hares(ByVal intMonth As Integer) As Integer Dim i As Integer Dim intCurMon As Integer 当前月新生兔子对数 Dim intPreMon1 As Integer 前一个月新生兔子对数 Dim intPreMon2 As Integer 前两个月新生兔子对数 前两个月分别为1对 intPreMon1 = 1 intPreMon2 = 1 从第3月起,新生兔子为前两月之和 For i = 3 To intMonth intCurMon = intPreMon2 + intPreMon1 intPreMon1 = intPreMon2 intPreMon2 = intCurMon Next Hares = intCurMon End Function 用递归法实现。参考代码如下: Public Function S(N As Integer) As Integer If N = 1 Or N= 2 Then S = 1 Else S = S(N-1) + S(N-2) End If End Function 年龄问题 有5个人做在一起,问第5个人多大了。他说比第四个人大2岁,问第四个人多大了,他说比第三个人大2岁,问第三个人多大了,他说比第二个人大2岁,问第二个人多大了,他说比第一个人大2岁,最后问第一个人,他说他10岁了。请问第5个人多大了? 递归法的归纳1: 递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。 递归算法解决问题的特点: (1)??? 递归就是在过程或函数里调用自身。 (2)??? 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。 (3)??? 递归算法解题
文档评论(0)