VB递归算法
➢递归算法而言并不涉及高深数学知识,只 不过初学者要建立起递归概念、深入了解 递归过程并不容易。
递归应用实例——阶乘计算
➢ 数学中阶乘定义: 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的阶乘……
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
'计算阶乘
课堂小结
➢ 函数格式:
End Function
调用
递归算法的基本思想是把规模较大问题 变成规模较小的、规模较小的问题又变 成规模更小的问题,当问题小到一定程 度时,可以直接得出它的解,从而得到 原来问题的解。即采用“大事化小、小 事化了”的基本思想。
调用
y = fact(3)
…… fact = 3 * fact (2)
…… fact = 2 * fact (1)
=3*2
=6
E
返回
B fact(2) =2*fact(1) =2*1 =2
C
调用
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
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中输出结果。
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
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 Sub Function trans(n As Integer) As String
If n <= 1 Then trans = n
Else trans = ___________________________________
End If E(n1d)F实un现cti该on程序的算法是_________递__归__算__法____________。
在文本框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 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
fact = 1 ……
fact (3)=6 返回
fact (2)=2 返回
fact (1)=1 返回
递归算法的实现要点
➢ (1)有明确的结束递归的边界条件(又称终止条件)以及结束 时的边界值,可以通过条件语句(If语句)来实现
➢ (2)函数的描述中包含其本身,即能用递归形式表示,且递 归终止条件的发展。
用的算法是 ( D )
A. 解析算法
B. 枚举算法
C. 查找算法
D.递归算法
下列关于VB基本控件的叙述中,正确的是 ( B ) A. 文本框和标签都可以用于程序的输入和输出 B. 命令按钮和标签都有Caption属性 C. 每个控件都具有相同的属性 D. 语句List1.clear中,List1属于ListBox控件类,clear是 该对象的属性。
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)
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
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)
程序界面的设计 ➢
函数体部分程序
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
练习题
➢ 用递归算法求 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
程序运行后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岁,请问第五个人多大?
若在文本框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
(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