VB递归算法讲解

上传人:我*** 文档编号:136518385 上传时间:2020-06-28 格式:PPT 页数:18 大小:119KB
返回 下载 相关 举报
VB递归算法讲解_第1页
第1页 / 共18页
VB递归算法讲解_第2页
第2页 / 共18页
VB递归算法讲解_第3页
第3页 / 共18页
VB递归算法讲解_第4页
第4页 / 共18页
VB递归算法讲解_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《VB递归算法讲解》由会员分享,可在线阅读,更多相关《VB递归算法讲解(18页珍藏版)》请在金锄头文库上搜索。

1、3.5 用递归法解决问题,什么是递归法,从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲什么呢? 从前有座山,山里有座庙,,很久以前,有一则古老而有趣的故事,流传至今:,蕴含了递归思想,递归法包括2种情况:,函数自己调用自己,两个函数之间相互调用,如果一个函数在定义时,直接或间接地调用了自己,这种算法在程序设计中统称为递归法。,函数是为了实现某种功能而编写的一段相对独立的程序。,自定义函数是指我们自己编写的函数。,标准函数 自定义函数,Abs( ) 、len( )、mid( )、chr( )、asc( ),自定义函数:,在VB中,自定义函数形式如下: Public|Private Fu

2、nction (参数列表) 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 Th

3、en 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

4、,基本思想:,把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定的程度直到可以直接得出它的解,从而得到原来问题的解。 注意:必须要有一个结束递归的条件,不得无限递归。,分析步骤:,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

5、)*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世纪意大利数学家斐波那契的名著算盘书里的问题。图中每个色块表示一对兔子,其中白色色块表示

6、新生兔子。从图中可以发现,每月新生兔子的对数为:1,1,2,3,5从第三个月起,当月新生兔子数为前两月新生兔子数之和。这个数列在数学上被称做“斐波那契数列”。,程序实现,这个问题如果不用递归法解决,其参考代码如下: 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 前两个月新生兔子对数 前两个月分

7、别为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(N1) + S(N2

8、) End If End Function,年龄问题,有5个人做在一起,问第5个人多大了。他说比第四个人大2岁,问第四个人多大了,他说比第三个人大2岁,问第三个人多大了,他说比第二个人大2岁,问第二个人多大了,他说比第一个人大2岁,最后问第一个人,他说他10岁了。请问第5个人多大了?,递归法的归纳1:,递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。 递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身。 (2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。 (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序,递归法的归纳2:,递归算法所体现的“重复”一般有三个要求: 一是每次调用在规模上都有所缩小(通常是减半); 二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入); 三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号