递归过程 (Visual Basic)

递归过程是指调用自身的过程。 通常,这并不是编写 Visual Basic 代码最有效的方法。

下面的过程使用递归来计算其原始参数的阶乘。

Function Factorial(n As Integer) As Integer
    If n <= 1 Then
        Return 1
    End If
    Return Factorial(n - 1) * n
End Function

递归过程的注意事项

限制条件 必须设计一个递归过程来测试至少存在一个可以终止递归的条件,并且还必须处理在合理的递归调用次数中不满足此类条件的情况。 如果不存在至少可以满足并且不会失败的一个条件,则你的过程将陷入在无限循环中执行的高度风险中。

内存使用率。 应用程序用于局部变量的空间量有限。 每次过程调用自身时,它会使用比该空间量更多的空间来获取其局部变量的其他副本。 如果此过程持续下去,最终会导致 StackOverflowException 错误。

效率。 几乎始终可以使用循环来代替递归。 循环不会产生传递参数、初始化额外存储以及返回值的开销。 在不使用递归调用的情况下,可能会有更好的性能。

相互递归。 如果两个过程相互调用,你可能会发现性能非常差,甚至会出现无限循环。 此类设计与单个递归过程表现出相同的问题,但可能更难以检测和调试。

带括号调用。 当 Function 过程以递归方式调用自身时,你需要在过程名称后面加上括号,即使没有参数列表也是如此。 否则,函数名称将采用表示函数的返回值的形式。

测试。 如果编写递归过程,应仔细测试该过程,确保它始终满足某些限制条件。 还应确保不会因为递归调用次数过多而导致内存耗尽。

另请参阅