《孙厚旺 用递归法解决问题》由会员分享,可在线阅读,更多相关《孙厚旺 用递归法解决问题(15页珍藏版)》请在金锄头文库上搜索。
1、3.5 用递归法解决问题丰县欢口中学 孙厚旺求以下函数的值: y=abs(9) y=int(9) y=sqr(9) 有没有可以求以9为半径的圆的面积 。 复习Private Function mj(r As Single) As Single Const pi = 3.14 mj = pi * r * r End FunctionPrivate Sub Command1_Click() Dim s As Single Dim a As Single a = Val(Text1.Text) s = mj(a) Print CStr(s) End Submj( )函数就是我们要找的求已知半径圆的面
2、积的函数。 像 y=abs(9) y=int(9) y=sqr(9) 这些语句中的函数在VB中已经存在了,称作是VB 的标准函数,我们可以直接调用就可以了,而刚才 我们使用的mj( ) 函数,不是VB的标准函数, 需要我们DIY。我们如何自定义函数?请同学们看课本66页。public/prinvatefunction 函数名称参数列表as 数据类型 局部常量、量定义 语句组 函数名称返回值end function 虽然VB为我们提供了大量的标准函数,但我们 在实际应用时难免有时还是找不到合意的,那 就只有自己解决了,这样为了一个特定的任务 而编出来的函数叫自定义函数。自定义函数格式1. 按照自
3、己的要求“制作”出适合自己的 问题。2可以方便地把较为复杂的问题分解成 若干个小问题去处理。3使程序结构清晰,层次分明,增强了 程序的可读性 。自定义函数的作用请同学们表演一场戏 。5位同学表演,按序号排好顺序 ,问第5位同学说比第4位同学 大2岁,问第三位同学,说比第 3位同学大2岁,问第3位同学说 比第2位同学大2岁,问第2位同 学说比第1位同学大2岁。请同学样仔细看戏:第一位同学该怎么回答 ? 请思考:我们如何通过编程来实现此算法? 解决步骤w1。建立数学模型。 w2。自定义函数。 w3。调用函数解决问题。像这种自己调用了自己的函数 叫做递归调用,这种算法就 叫做递归算法。AA如果A函数
4、调用B函数,B函数又反过来调用A函数, 那这种现象也叫做递归调用。public function nl( n as integer) as integer nl=nl(n-1)+2 end function 请同学们自己调试以上代码 。 自定义函数代码如下:我们再问一下第一位同学看他怎 么回答 子程序中定义递归调用。一般格式为: if 边界条件 1 成立 then 赋予边界值 1 elseif 边界条件 2 成立 then 赋予边界值 2 else 调用解决问题的通式 endif归纳 递归法有什么特点 ?什么样的问题可以使用递归法来解决?A 递归体(数学模型)必须明确。 B 递归法是层层调用函
5、数实现的,函 数先由上向下调用,称为递推。 C 当问题求解的规模越来越小时,必 定有一个结束条件作为递推出口。 D 递归法的可读性强。 递归算法的基本思想是:把规模大的、较 难解决的问题变成规模较小的、易解决的 同一问题。规模较小的问题又变成规模更 小的问题,并且小到一定程度可以直接得 出它的解,从而得到原来问题的解。递归算法的基本思想Public Function s ( n As Integer) As Long If n=1 Then s=1 Elses=n*s(n-1) End if End Function Private Sub Form_Click( ) Print “s(5)=”;s(5) End Sub编写递归函数求5!的值实践1实践2案例:有一天一只猴子摘了一堆桃子,第一 天吃了总桃数的一半,嘴馋,又多吃一个, 第二天又吃了剩下的一半,又嘴馋,再多吃 一个,以后猴子都是吃剩下的一半再多吃一 个,到第10天的时候发出无法吃一半,再多 吃一个,因为只剩下一只了。问这只猴子第 一天一共摘多少只桃子? 要求:分别使用递归法和循环语句(for next )编程实现,并分析比较两种算法的区别和 特点。