VB递归算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Function fact(n As Integer) As Integer If n <= 1 Then fact = 1 Else fact = n * fact (n - 1) End If
End Function
递归函数调用: 求3的阶乘的值
Function fact(n As Integer) As Integer
End Function
Private Sub Command1_Click() Dim y As Integer y = fact(3) Print y
End Sub
思考:求9的阶乘的值。如何修改代码?
阶乘计算程序的设计
➢ 设计一个程序,在文本框Text1中输入n的值,单击命令按 钮Command1后,调用函数fact计算 s=1!+2!+3!+…+n!的值, 并在文本框Text2中输出结果。
在文本框Text1中输入一个字符串,点击“返序”按钮Command1,在文本框Text2 中以反向方式显示该字符串。
实现该程序的代码如下: Function reverse(st As String) As String If Len(st) <= 1 Then
reverse = st Else reverse = Right(st, 1) & reverse(Left(st, Len(st) - 1)) End If End Function Private Sub Command1_Click() Dim st As String st = Text1.Text Text2.Text = ______________________ E(n1d)S实ub现该程序的算法是_______递__归__算_法_______________。
Function abc(n As Integer) As Long
dim sum as long
sum=0
text1.text=text1.text+str(n)
sum=sum+len(text1.text)
If n = 1 Then
abc = 1 Else
abc = 2 * abc(n /2) End If
的所有整数,解决这个问题,最适合的算法是( A )
A. 枚举算法 B.解析算法 C. 查找算法 D.递归算法
小斌设计了一个算法来求n!(n阶乘)的值,他的算法思想是:
把n!转换为n*(n-1)!,而(n-1)!又可以转换为(n-1)*(n-2)!,
如此继续,直到2*1!,而1!=1,从而求出了n!的值 。小斌采
程序运行后sum的 值为( 8 4 2 1 )
End Function
Private Sub Command1_Click() Dim x As Long
text2.text显示的值 为(8 )
x = abc(8)
Text2.Text = Str(x)
End Sub
百度文库
练习题
➢ 有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁,问第 四个人岁数,他说比第3个人大2岁,问第三个人岁数,他说比第二个 人大2岁,问第二个人岁数,他说比第1个人大2岁,问第1个人岁数, 他说他10岁,请问第五个人多大?
End Function
主程序部分代码
Private Sub Command1_Click() Dim n As Ineger, s As Long n = Val(Text1.Text) s = fact(n) Text2.Text = Str(s) End Sub
'计算阶乘
课堂小结
➢ 函数格式:
Function age(n As Integer) As Long If n = 1 Then
age = 10 Else
age = age(n - 1) + 2 End If End Function Private Sub Command1_Click()
print "第五个人的年龄为" + Str(age(5)) End Sub
程序界面的设计 ➢
函数体部分程序
Function fact(n As Integer) As Long
Dim i As Integer, f As Long, sum As Long
sum = 0
f=1
For i = 1 To n
f=f*i
sum=sum+f
Next i
'阶乘算法
fact = sum
Function fact(n As Integer) As Integer
If n <= 1 Then fact = 1
边界条件
Else
fact = n * fact (n - 1) End If
包含其本身
End Function
程序运行后,文本框text1中显示的值是?
Private Sub Command1_Click() Text1.text=f(4)
If n <= 1 Then
fact = 1
Else
fact = n * fact (n - 1)
End If
End Function
Private Sub Command1_Click()
Dim y As Integer y = fact(3) Print y
End Sub
A
fact(3) 调用 =3*fact(2)
用的算法是 ( D )
A. 解析算法
B. 枚举算法
C. 查找算法
D.递归算法
下列关于VB基本控件的叙述中,正确的是 ( B ) A. 文本框和标签都可以用于程序的输入和输出 B. 命令按钮和标签都有Caption属性 C. 每个控件都具有相同的属性 D. 语句List1.clear中,List1属于ListBox控件类,clear是 该对象的属性。
➢递归算法而言并不涉及高深数学知识,只 不过初学者要建立起递归概念、深入了解 递归过程并不容易。
递归应用实例——阶乘计算
➢ 数学中阶乘定义: 5的阶乘:5!=5×4×3×2×1 4的阶乘:4!=4×3×2×1 整数n的阶乘:n!=n×(n-1)×……2×1
问题分析:n!=n ×(n-1)!,(例如:5!=5×4!),而1!=1 求n的阶乘转化为求n-1的阶乘……
1、递归的定义
➢在定义一个函数或过程时出现调用自身的 成分,称之为递归。
Function fx(a As Integer) As Integer
If a <= 1 Then
fx = 1 Else
调用自身
fx = a + fx(a - 1)
End If
End Function
递归应用
➢递归程序设计是VB语言程序设计中的一种 重要的方法,它使许多复杂的问题变得简 单,容易解决了。
Function f(参数列表)as integer 语句块
End function
➢ 函数或过程调用其本身,称为递归。
如:Function f(n as integer)as integer if n<=1 then f=1
Else f=n* f(n-1)
End if End function
f=1 Else
f=f(n-1)+2 End If End Function 程序运行时,单击命令按钮command1后,文本框text1中显示的内容是
( B ),标签Label1显示的是( F )
A. 3 B. 321 C. 123 D. 2 E.4 F.5 G.6
在100~999中,找出能同时满足除3余2,除5余3,除7余2
End Sub Function trans(n As Integer) As String
If n <= 1 Then trans = n
Else trans = ___________________________________
End If E(n1d)F实un现cti该on程序的算法是_________递__归__算__法____________。
练习题
➢ 用递归算法求 1~n 个连续自然数的和
Function sum(n As Integer) As Integer If n = 1 Then sum = 1 Else sum = sum(n - 1) + n End If End Function
Private Sub Command1_Click() Dim n As Integer n = Val(Text1.Text) Text2.Text = Str(sum(n)) End Sub
(2)划线处应填入的语句是____tr_a_n_s_(_n_\_2_)_&__n__M_o_d__2____。
求阶乘使用循环实现
Function fact(n As Integer) As Integer Dim i As Integer, s As Integer s=1 For i = 1 To n s=s*i Next i fact = s
fx = 1
Else
fx = 2 * fx(n - 1)
End If
End Function
Private Sub Command1_Click()
Dim n As Integer, x As Long
n = Val(Text1.Text)
x = fx(n)
Text2.Text = Str(x)
End Sub
=3*2
=6
E
返回
B fact(2) =2*fact(1) =2*1 =2
C
调用
fact(1)
=1 返回
D
当n=3时
Function fact(n As Integer) As Integer If n <= 1 Then fact = 1 Else fact = n * fact (n - 1) End If
(2)划线处应填入的语句是————R—ev—er—se—(s—t) —————————
编写一个实现将一个十进制整数转换成二进制的VB程序。运行该程序,如下图所 示。在文本框Text1中输入数n,点击“转换”按钮,在标签Label2中显示转换结 果。
Private Sub Command1_Click() Dim n As Integer Dim s As String n = Val(Text1.Text) s = trans(n) Label2.Caption = "该数的二进制为:" + s
End Sub
Function f(n as integer)as integer if n<=1 then f=1
Else f=n* f(n-1)
End if End function
观察如下VB程序段:
Function fx(n As Integer) As Long
If n = 1 Then
End Function
调用
递归算法的基本思想是把规模较大问题 变成规模较小的、规模较小的问题又变 成规模更小的问题,当问题小到一定程 度时,可以直接得出它的解,从而得到 原来问题的解。即采用“大事化小、小 事化了”的基本思想。
调用
y = fact(3)
…… fact = 3 * fact (2)
…… fact = 2 * fact (1)
若在文本框Text1中输入数字5,单击命令按钮Command1后,
在文本框Text2显示的内容为( C )
A. 2
B. 8
C. 16
D. 32
下列VB程序中,f是一个递归函数。 Private Sub command1_Click()
Dim y as Long Text1.Text=”” y=f(3) Label1.Caption=str(y) End Sub Function f (n As Integer ) as Long Text1.Text=Text1.Text+Str(n) If n <=1 Then
fact = 1 ……
fact (3)=6 返回
fact (2)=2 返回
fact (1)=1 返回
递归算法的实现要点
➢ (1)有明确的结束递归的边界条件(又称终止条件)以及结束 时的边界值,可以通过条件语句(If语句)来实现
➢ (2)函数的描述中包含其本身,即能用递归形式表示,且递 归终止条件的发展。
End Function
递归函数调用: 求3的阶乘的值
Function fact(n As Integer) As Integer
End Function
Private Sub Command1_Click() Dim y As Integer y = fact(3) Print y
End Sub
思考:求9的阶乘的值。如何修改代码?
阶乘计算程序的设计
➢ 设计一个程序,在文本框Text1中输入n的值,单击命令按 钮Command1后,调用函数fact计算 s=1!+2!+3!+…+n!的值, 并在文本框Text2中输出结果。
在文本框Text1中输入一个字符串,点击“返序”按钮Command1,在文本框Text2 中以反向方式显示该字符串。
实现该程序的代码如下: Function reverse(st As String) As String If Len(st) <= 1 Then
reverse = st Else reverse = Right(st, 1) & reverse(Left(st, Len(st) - 1)) End If End Function Private Sub Command1_Click() Dim st As String st = Text1.Text Text2.Text = ______________________ E(n1d)S实ub现该程序的算法是_______递__归__算_法_______________。
Function abc(n As Integer) As Long
dim sum as long
sum=0
text1.text=text1.text+str(n)
sum=sum+len(text1.text)
If n = 1 Then
abc = 1 Else
abc = 2 * abc(n /2) End If
的所有整数,解决这个问题,最适合的算法是( A )
A. 枚举算法 B.解析算法 C. 查找算法 D.递归算法
小斌设计了一个算法来求n!(n阶乘)的值,他的算法思想是:
把n!转换为n*(n-1)!,而(n-1)!又可以转换为(n-1)*(n-2)!,
如此继续,直到2*1!,而1!=1,从而求出了n!的值 。小斌采
程序运行后sum的 值为( 8 4 2 1 )
End Function
Private Sub Command1_Click() Dim x As Long
text2.text显示的值 为(8 )
x = abc(8)
Text2.Text = Str(x)
End Sub
百度文库
练习题
➢ 有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁,问第 四个人岁数,他说比第3个人大2岁,问第三个人岁数,他说比第二个 人大2岁,问第二个人岁数,他说比第1个人大2岁,问第1个人岁数, 他说他10岁,请问第五个人多大?
End Function
主程序部分代码
Private Sub Command1_Click() Dim n As Ineger, s As Long n = Val(Text1.Text) s = fact(n) Text2.Text = Str(s) End Sub
'计算阶乘
课堂小结
➢ 函数格式:
Function age(n As Integer) As Long If n = 1 Then
age = 10 Else
age = age(n - 1) + 2 End If End Function Private Sub Command1_Click()
print "第五个人的年龄为" + Str(age(5)) End Sub
程序界面的设计 ➢
函数体部分程序
Function fact(n As Integer) As Long
Dim i As Integer, f As Long, sum As Long
sum = 0
f=1
For i = 1 To n
f=f*i
sum=sum+f
Next i
'阶乘算法
fact = sum
Function fact(n As Integer) As Integer
If n <= 1 Then fact = 1
边界条件
Else
fact = n * fact (n - 1) End If
包含其本身
End Function
程序运行后,文本框text1中显示的值是?
Private Sub Command1_Click() Text1.text=f(4)
If n <= 1 Then
fact = 1
Else
fact = n * fact (n - 1)
End If
End Function
Private Sub Command1_Click()
Dim y As Integer y = fact(3) Print y
End Sub
A
fact(3) 调用 =3*fact(2)
用的算法是 ( D )
A. 解析算法
B. 枚举算法
C. 查找算法
D.递归算法
下列关于VB基本控件的叙述中,正确的是 ( B ) A. 文本框和标签都可以用于程序的输入和输出 B. 命令按钮和标签都有Caption属性 C. 每个控件都具有相同的属性 D. 语句List1.clear中,List1属于ListBox控件类,clear是 该对象的属性。
➢递归算法而言并不涉及高深数学知识,只 不过初学者要建立起递归概念、深入了解 递归过程并不容易。
递归应用实例——阶乘计算
➢ 数学中阶乘定义: 5的阶乘:5!=5×4×3×2×1 4的阶乘:4!=4×3×2×1 整数n的阶乘:n!=n×(n-1)×……2×1
问题分析:n!=n ×(n-1)!,(例如:5!=5×4!),而1!=1 求n的阶乘转化为求n-1的阶乘……
1、递归的定义
➢在定义一个函数或过程时出现调用自身的 成分,称之为递归。
Function fx(a As Integer) As Integer
If a <= 1 Then
fx = 1 Else
调用自身
fx = a + fx(a - 1)
End If
End Function
递归应用
➢递归程序设计是VB语言程序设计中的一种 重要的方法,它使许多复杂的问题变得简 单,容易解决了。
Function f(参数列表)as integer 语句块
End function
➢ 函数或过程调用其本身,称为递归。
如:Function f(n as integer)as integer if n<=1 then f=1
Else f=n* f(n-1)
End if End function
f=1 Else
f=f(n-1)+2 End If End Function 程序运行时,单击命令按钮command1后,文本框text1中显示的内容是
( B ),标签Label1显示的是( F )
A. 3 B. 321 C. 123 D. 2 E.4 F.5 G.6
在100~999中,找出能同时满足除3余2,除5余3,除7余2
End Sub Function trans(n As Integer) As String
If n <= 1 Then trans = n
Else trans = ___________________________________
End If E(n1d)F实un现cti该on程序的算法是_________递__归__算__法____________。
练习题
➢ 用递归算法求 1~n 个连续自然数的和
Function sum(n As Integer) As Integer If n = 1 Then sum = 1 Else sum = sum(n - 1) + n End If End Function
Private Sub Command1_Click() Dim n As Integer n = Val(Text1.Text) Text2.Text = Str(sum(n)) End Sub
(2)划线处应填入的语句是____tr_a_n_s_(_n_\_2_)_&__n__M_o_d__2____。
求阶乘使用循环实现
Function fact(n As Integer) As Integer Dim i As Integer, s As Integer s=1 For i = 1 To n s=s*i Next i fact = s
fx = 1
Else
fx = 2 * fx(n - 1)
End If
End Function
Private Sub Command1_Click()
Dim n As Integer, x As Long
n = Val(Text1.Text)
x = fx(n)
Text2.Text = Str(x)
End Sub
=3*2
=6
E
返回
B fact(2) =2*fact(1) =2*1 =2
C
调用
fact(1)
=1 返回
D
当n=3时
Function fact(n As Integer) As Integer If n <= 1 Then fact = 1 Else fact = n * fact (n - 1) End If
(2)划线处应填入的语句是————R—ev—er—se—(s—t) —————————
编写一个实现将一个十进制整数转换成二进制的VB程序。运行该程序,如下图所 示。在文本框Text1中输入数n,点击“转换”按钮,在标签Label2中显示转换结 果。
Private Sub Command1_Click() Dim n As Integer Dim s As String n = Val(Text1.Text) s = trans(n) Label2.Caption = "该数的二进制为:" + s
End Sub
Function f(n as integer)as integer if n<=1 then f=1
Else f=n* f(n-1)
End if End function
观察如下VB程序段:
Function fx(n As Integer) As Long
If n = 1 Then
End Function
调用
递归算法的基本思想是把规模较大问题 变成规模较小的、规模较小的问题又变 成规模更小的问题,当问题小到一定程 度时,可以直接得出它的解,从而得到 原来问题的解。即采用“大事化小、小 事化了”的基本思想。
调用
y = fact(3)
…… fact = 3 * fact (2)
…… fact = 2 * fact (1)
若在文本框Text1中输入数字5,单击命令按钮Command1后,
在文本框Text2显示的内容为( C )
A. 2
B. 8
C. 16
D. 32
下列VB程序中,f是一个递归函数。 Private Sub command1_Click()
Dim y as Long Text1.Text=”” y=f(3) Label1.Caption=str(y) End Sub Function f (n As Integer ) as Long Text1.Text=Text1.Text+Str(n) If n <=1 Then
fact = 1 ……
fact (3)=6 返回
fact (2)=2 返回
fact (1)=1 返回
递归算法的实现要点
➢ (1)有明确的结束递归的边界条件(又称终止条件)以及结束 时的边界值,可以通过条件语句(If语句)来实现
➢ (2)函数的描述中包含其本身,即能用递归形式表示,且递 归终止条件的发展。