【最新】用递归法解决问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们如何自定义函数?
请同学们看课本66页。
2021/2/2
4
自定义函数格式
[public/prinvate]function <函数名称>[参数列表]as 数据类型
局部常量、量定义 语句组 函数名称=返回值
end function
虽然VB为我们提供了大量的标准函数,但我们 在实际应用时难免有时还是找不到合意的,那 就只有自己解决了,这样为了一个特定的任务 而编出来的函数叫自定义函数。
请同学样仔细看戏:第一位同学该怎么回答?
请思考:我们如何通过编程来实现此算法?
2021/2/2
7
解决步骤
1。建立数学模型。 2。自定义函数。 Baidu Nhomakorabea。调用函数解决问题。
A 像这种自己调用了自己的函数
A
叫做递归调用,这种算法就 叫做递归算法。
如果A函数调用B函数,B函数又反过来调用A函数, 那这种现象也叫做递归调用。
s=1 Else s=n*s(n-1) End if End Function Private Sub Form_Click( ) Print “s(5)=”;s(5) End Sub
2021/2/2
14
实践2
案例:有一天一只猴子摘了一堆桃子,第一 天吃了总桃数的一半,嘴馋,又多吃一个, 第二天又吃了剩下的一半,又嘴馋,再多吃 一个,以后猴子都是吃剩下的一半再多吃一 个,到第10天的时候发出无法吃一半,再多 吃一个,因为只剩下一只了。问这只猴子第 一天一共摘多少只桃子? 要求:分别使用递归法和循环语句(for next )编程实现,并分析比较两种算法的区别和 特点。
if 边界条件 1 成立 then 赋予边界值 1
[ elseif 边界条件 2 成立 then 赋予边界值 2 ┇] else 调用解决问题的通式 endif
2021/2/2
11
归纳
递归法有什么特点?
什么样的问题可以使用递归法来解决?
A 递归体(数学模型)必须明确。 B 递归法是层层调用函数实现的,函 数先由上向下调用,称为递推。 C 当问题求解的规模越来越小时,必 定有一个结束条件作为递推出口。 D 递归法的可读性强。
2021/2/2
15
2021/2/2
5
自定义函数的作用
1. 按照自己的要求“制作”出适合自己 的问题。
2.可以方便地把较为复杂的问题分解成 若干个小问题去处理。
3.使程序结构清晰,层次分明,增强了 程序的可读性 。
2021/2/2
6
请同学们表演一场戏。
5位同学表演,按序号排好顺序, 问第5位同学说比第4位同学大2 岁,问第三位同学,说比第3位 同学大2岁,问第3位同学说比 第2位同学大2岁,问第2位同学 说比第1位同学大2岁。
3.5 用递归法解决问 题
2021/2/2
丰县欢口中学 孙厚旺
1
复习
求以下函数的值: y=abs(9) y=int(9) y=sqr(9)
有没有可以求以9为半径的圆的面积。
2021/2/2
2
Private Function mj(r As Single) As Single Const pi = 3.14 mj = pi * r * r End Function
Private Sub Command1_Click() Dim s As Single Dim a As Single a = Val(Text1.Text) s = mj(a) Print CStr(s) End Sub
mj( )函数就是我们要找的求已知半径圆的面积的函数。
2021/2/2
3
像 y=abs(9) y=int(9) y=sqr(9) 这些语句中的函数在VB中已经存在了,称作是VB 的标准函数,我们可以直接调用就可以了,而刚才 我们使用的mj( ) 函数,不是VB的标准函数, 需要我们DIY。
2021/2/2
8
自定义函数代码如下:
public function nl( n as integer) as integer nl=nl(n-1)+2 end function
请同学们自己调试以上代码。
2021/2/2
9
我们再问一下第一位同学看他怎 么回答
2021/2/2
10
子程序中定义递归调用。一般格式为:
2021/2/2
12
递归算法的基本思想
递归算法的基本思想是:把规模大的、较 难解决的问题变成规模较小的、易解决的 同一问题。规模较小的问题又变成规模更 小的问题,并且小到一定程度可以直接得 出它的解,从而得到原来问题的解。
2021/2/2
13
实践1
编写递归函数求5!的值 Public Function s ( n As Integer) As Long If n=1 Then
请同学们看课本66页。
2021/2/2
4
自定义函数格式
[public/prinvate]function <函数名称>[参数列表]as 数据类型
局部常量、量定义 语句组 函数名称=返回值
end function
虽然VB为我们提供了大量的标准函数,但我们 在实际应用时难免有时还是找不到合意的,那 就只有自己解决了,这样为了一个特定的任务 而编出来的函数叫自定义函数。
请同学样仔细看戏:第一位同学该怎么回答?
请思考:我们如何通过编程来实现此算法?
2021/2/2
7
解决步骤
1。建立数学模型。 2。自定义函数。 Baidu Nhomakorabea。调用函数解决问题。
A 像这种自己调用了自己的函数
A
叫做递归调用,这种算法就 叫做递归算法。
如果A函数调用B函数,B函数又反过来调用A函数, 那这种现象也叫做递归调用。
s=1 Else s=n*s(n-1) End if End Function Private Sub Form_Click( ) Print “s(5)=”;s(5) End Sub
2021/2/2
14
实践2
案例:有一天一只猴子摘了一堆桃子,第一 天吃了总桃数的一半,嘴馋,又多吃一个, 第二天又吃了剩下的一半,又嘴馋,再多吃 一个,以后猴子都是吃剩下的一半再多吃一 个,到第10天的时候发出无法吃一半,再多 吃一个,因为只剩下一只了。问这只猴子第 一天一共摘多少只桃子? 要求:分别使用递归法和循环语句(for next )编程实现,并分析比较两种算法的区别和 特点。
if 边界条件 1 成立 then 赋予边界值 1
[ elseif 边界条件 2 成立 then 赋予边界值 2 ┇] else 调用解决问题的通式 endif
2021/2/2
11
归纳
递归法有什么特点?
什么样的问题可以使用递归法来解决?
A 递归体(数学模型)必须明确。 B 递归法是层层调用函数实现的,函 数先由上向下调用,称为递推。 C 当问题求解的规模越来越小时,必 定有一个结束条件作为递推出口。 D 递归法的可读性强。
2021/2/2
15
2021/2/2
5
自定义函数的作用
1. 按照自己的要求“制作”出适合自己 的问题。
2.可以方便地把较为复杂的问题分解成 若干个小问题去处理。
3.使程序结构清晰,层次分明,增强了 程序的可读性 。
2021/2/2
6
请同学们表演一场戏。
5位同学表演,按序号排好顺序, 问第5位同学说比第4位同学大2 岁,问第三位同学,说比第3位 同学大2岁,问第3位同学说比 第2位同学大2岁,问第2位同学 说比第1位同学大2岁。
3.5 用递归法解决问 题
2021/2/2
丰县欢口中学 孙厚旺
1
复习
求以下函数的值: y=abs(9) y=int(9) y=sqr(9)
有没有可以求以9为半径的圆的面积。
2021/2/2
2
Private Function mj(r As Single) As Single Const pi = 3.14 mj = pi * r * r End Function
Private Sub Command1_Click() Dim s As Single Dim a As Single a = Val(Text1.Text) s = mj(a) Print CStr(s) End Sub
mj( )函数就是我们要找的求已知半径圆的面积的函数。
2021/2/2
3
像 y=abs(9) y=int(9) y=sqr(9) 这些语句中的函数在VB中已经存在了,称作是VB 的标准函数,我们可以直接调用就可以了,而刚才 我们使用的mj( ) 函数,不是VB的标准函数, 需要我们DIY。
2021/2/2
8
自定义函数代码如下:
public function nl( n as integer) as integer nl=nl(n-1)+2 end function
请同学们自己调试以上代码。
2021/2/2
9
我们再问一下第一位同学看他怎 么回答
2021/2/2
10
子程序中定义递归调用。一般格式为:
2021/2/2
12
递归算法的基本思想
递归算法的基本思想是:把规模大的、较 难解决的问题变成规模较小的、易解决的 同一问题。规模较小的问题又变成规模更 小的问题,并且小到一定程度可以直接得 出它的解,从而得到原来问题的解。
2021/2/2
13
实践1
编写递归函数求5!的值 Public Function s ( n As Integer) As Long If n=1 Then