递归过程是指调用自身的过程。 一般情况下,这不是编写 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
当过程以递归方式调用自身时,即使没有参数列表,也必须使用括号遵循过程名称。 否则,将函数名称视为表示函数的返回值。
测试。 如果编写递归过程,则应非常仔细地测试它,以确保它始终满足一些限制条件。 还应确保不会因为递归调用次数过多而导致内存耗尽。