3.8递归算法实例及程序实现(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.递归算法的实现要点 递归调用必须是有限制的,有限才有意义。所以在进 行算法描述时必须设置相关的控制条件,使其成为有限。 这可以通过条件语句(If语句)来实现,即只有在设定的条件 成立时递归才继续,否则终止递归。可见,构成递归的必 须满足以下条件: (1)有明确的结束递归的边界条件(又称终止条件)以及 结束时的边界值; (2)函数的描述中包含其本身,即能用递归形式表示, 且递归终止条件的发展。
A.查找算法
B.解析算法
C.递归算法
D.排序算法
(C )
4. 有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁,问第四个人 岁数,他说比第3个人大2岁,问第三个人岁数,他说比第二个人大2岁,问 第二个人岁数,他说比第1个人大2岁,问第1个人岁数,他说他10岁,请问 第五个人多大? 以下是VB程序代码:
3.8 递归算法实例及程序实现
1.递归算法的概念 一个过程或函数在其定义或说明中有直接或间接调用自 身的一种方法,称为递归算法。递归算法的基本思想是把规 模较大的、较难解决的问题变成规模较小的、容易解决的同 一问题,规模较小的问题又变成规模更小的问题,当问题小 到一定程度时,可以直接得出它的解,从而得到原来问题的 解。即采用“大事化小、小事化了”的基本思想。 诸如著名的汉诺塔问题、八皇后问题、斐波那契 (Fibonacci)的兔子问题、猴子吃桃问题、年龄问题等都是递 归问题。 VB允许一个自定义函数在函数体的内部调用自己,这 样的函数就叫递归函数。
3.递归算法的设计方法 当所求解问题难于直接求解时,首先,把问题分解成 若干个难度较小、较容易求解的子问题,子问题与原问题 具有类同的结构。如果子问题能够直接求解,则解之;如 果子问题仍不能直接求解,将每个子问题再分解成若干个 更简单的子问题,直到解出的子问题能够很容易地求解或 解为已知,这是实现递归的模板。然后,设计递归出口(即 结束递归的边界条件),在满足出口条件时,递归函数不能 再调用自己,必须返回一个确定的值。将这两方面的问题 分析好之后,就可以在程序体中定义递归调用了。
End Function 注:该示例程序在素材文件夹下vb36文件夹中。
本节的学习要求掌握递归算法的基本思想,掌握递 归程序的实现要点。学会编写简单的递归函数。考查方 式为选择题与填空题。
1.下列有关递归的说法,错误的是 A.递法算法的代码一般较少 B.递归算法一定要有终止条件 C.递归算法体现了大事化小的思想 D.递归函数中可以不包含条件控制语句
sum = __________________________ End If End Function Private Sub Command1_Click() Inputbox “请输入n的值” Msgbox “1~n的和为”+str(sum(n)) End Sub
划线处应填入的语句是_n_+_s_u_m__(n_-_1_)_。
End Sub
该程序采用的算法是___递___归__算___法__________________。
5.用递归算法求 1~n 个连续自然数的和的VB程序段代码如下: Function sum (n A Integer)A Integer
'求 1~n 个连续自然数的和 If n = 1 Then
sum = 1 Else
( D)
2.文本框对象Text1中的Text属性发生改变时,会驱动以下事件处 理过程
Private Sub Text1_Change() If Len(Text1.Text) < 8 Then Text1.Text = Text1.Text +
Text1.Text
End Sub 该过程体现的算法思想是
代码如下:
Private Sub Command1_Click() Dim n As Integer, m As Double n = Val(Text1.Text) m = f(n) Text2.Text = Str(n) + “的阶乘为” + Str(m)
End Sub
Function f(n As Integer) As Double If n <= 1 Then f=1 Else '参数n的值大于1 f = n * f(n - 1) '递归实现调用自身来计算f(n-1)的值 End If
6.编写一个VB程序,实现字符串反序显示。该程序如下图所示: 在文本框Text1中输入一个字符串,点击“返序”按钮Command1,在文本框Text2 中以反向方式显示该字符串。
Public 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() MsgBox “第五个人的年龄为” + Str(age(5))
A.排序算法 B.递归算法 C.查找算法 D.解析算法
(B)
3.下列VB程序模块可以计算正整数n阶乘的值。
Function f(n As Integer) As Double
If n <= 1 Then
f=1
Else
f = n * f(n - 1)
End If
End Function
该模块采用的是
在通常情况下,递归调用都是要受到条件控制的,而 且在被调用的过程中,会对调用条件进行有规律的修改, 直到满足边界条件,返回边界值,结束递归;然后按原来 的路径逐层返回,求出原问题的解。由此可知,递归算法 的设计关键在于递归描述和递归终止条件。
如下图所示是递归算法调用过程示意图:
4.递归算法的实现过程 递归算法的过程是不断的自调用,直到到达递归出口才结 束。然后,递归算法开始按最后调用的过程最先返回的次序逐 层返回,返回到最外层的调用语句时递归算法执行过程结束。 可见,递归的实现过程包含了“调用”和“返回”两个阶段。 许多问题都是可以利用递归算法进行求解的。VB中一个最 常用的例子就是计算阶乘。例如,用递归函数实现计算机n! 的求解。运行界面如下பைடு நூலகம்所示。