递归是推理和问题求解的一种强有力方法,原因在于许多对象,特别是数学研究对象具有递归的结构。简单地说,如果通过一个对象自身的结构来描述或部分描述该对象就称为递归。最简单而易于理解的一个例子是阶乘的递归定义。如果以函数f(n)表示自然数n的阶乘的值,则有定义:
递归定义使我们能够用有限的语句描述一个无穷的集合。本例描述一个无穷的集合只用了两个语句。 VB程序设计语言允许一个过程体中有调用自身的语句,称为递归调用。也允许调用另一过程,而该过程又反过来调用本过程,称为间接递归调用。这种功能为求解具有递归结构的问题提供了强有力手段,使程序语言的描述与问题的自然描述完全一致,因而使程序易于理解、易于保证和维护。例如,对于上面的n阶乘的递归定义,可以写出相应的VB函数过程,如下面的例8.24。这个过程的推理(计算)路线与原来函数的(递归)数学定义完全一致。
例8.24 求n阶乘的VB函数过程。
Private Function F( byval n As Integer ) As long If n=1 Then F=1 Else: F=n*F(n-1) End If End Function
让我们来跟踪这个程序的计算过程,令n=4调用这个函数,用下面的形式来表示递归求解的过程: (1)F(4)=4×F(3) 'n=4调用函数过程F(3)
(2)F(3)=3×F(2) 'n=3调用函数过程F(2) (3)F(2)=2×F(1) 'n=2调用函数过程F(1)
(4)F(1)=1 'n=1求得F(1)的值 (5)F(2)=2×1=2 '回归,n=2,求得F(2)的值 (6)F(3)=3×2=6 '回归,n=3,求得F(3)的值 (7)F(4)=4×6=24 '回归,n=4,求得F(4)的值 上面第一步到第四步求出F(1)=1的步骤称为递推,从第四步到第七步求出F(4)=4×6的步骤称为回归。 从这个例子可以看出,递归求解有两个条件: 1.给出递归终止的条件和相应的状态。 在本例中递归终止的条件是n=1,状态是F(1)=1。 2.给出递归的表述形式,并且这种表述要向着终止条件变化,在有限步内达到终止条件。 在本例中,当n>1时,给出递归的表述形式为 F(n)=n×F(n-1),函数值F(n)用函数值F(n-1)来表示。参数的值向减少的方向变化,在第n步出现终止条件n=1。
[此贴子已经被作者于2007-1-26 9:34:25编辑过] |