《递归法》-教科选修1.pptVIP

  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文档。上传文档
查看更多
3.5 用递归法解决问题 什么是递归法 从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲什么呢? 从前有座山,山里有座庙,…… 很久以前,有一则古老而有趣的故事,流传至今: 蕴含了递归思想 递归法包括2种情况: 函数自己调用自己 两个函数之间相互调用 如果一个函数在定义时,直接或间接地调用了自己,这种算法在程序设计中统称为递归法。 函数是为了实现某种功能而编写的一段相对独立的程序。 自定义函数是指我们自己编写的函数。 标准函数 自定义函数 Abs( ) 、len( )、mid( )、chr( )、asc( )…… 自定义函数: 在VB中,自定义函数形式如下: [Public|Private] Function 函数名称 ([参数列表]) [As 类型] 局部常量、变量定义 语句组 函数名称=返回值 End Function 自定义函数的调用,可以有三种格式: 变量=函数名称(参数) Call 函数名称(参数) 函数名称 参数 子过程的定义 [Public|private] function 函数名称 ([参数列表]) [as 类型] 局部常量、变量定义 语句组 函数名称=返回值 End function [public|private] sub 子过程名称 ([参数列表]) 局部常量、变量定义 过程语句组 End sub 自定义函数: 子过程的定义: private sub s(n As Integer) As Long If n = 1 Then s =1 Else s =s(n-1)*n End If End sub Public Function s(n As Integer) As Long If n = 1 Then s =1 Else s =s(n-1)*n End If End Function 比较两个数的大小 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个月后这人有多少对新生兔子? 问题分析 这个问题是公元前13世纪意大利数学家斐波那契的名著《算盘书》里的问题。图中每个色块表示一对兔子,其中白色色块表示新生兔子。从图中可以发现,每月新生兔子的对数为:1,1,2,3,5……从第三个月起,当月新生兔子数为前两月新生兔子数之和。这个数列在数学上被称做“斐波那契数列”。 程序实现 这个问题如果不用递归法解决,其参考代码如下: Private Function Hares(ByVal intMonth As I

文档评论(0)

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

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

1亿VIP精品文档

相关文档