Procedimientos recursivos (Visual Basic)

Un procedimiento recursivo es aquel que se llama a sí mismo. En general, esta no es la manera más eficaz de escribir código de Visual Basic.

El procedimiento siguiente usa recursividad para calcular el factorial de su argumento original.

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

Consideraciones con procedimientos recursivos

Condiciones limitantes. Debes diseñar un procedimiento recursivo para probar al menos una condición que pueda terminar la recurrencia, y también debes manejar el caso en que no se satisfaga dicha condición dentro de un número razonable de llamadas recursivas. Sin al menos una condición que se pueda cumplir sin errores, el procedimiento ejecuta un alto riesgo de ejecutarse en un bucle infinito.

Uso de memoria. La aplicación tiene una cantidad limitada de espacio para las variables locales. Cada vez que un procedimiento se llama a sí mismo, usa más espacio para copias adicionales de sus variables locales. Si este proceso continúa indefinidamente, finalmente produce un error StackOverflowException.

Eficacia. Casi siempre se puede usar un bucle en lugar de la recursividad. Un bucle no tiene la sobrecarga de pasar argumentos, inicializar almacenamiento adicional y devolver valores. Tu rendimiento puede ser mucho mejor sin llamadas recursivas.

Recursividad mutua. Es posible que observes un rendimiento muy deficiente o incluso un bucle infinito, si dos procedimientos se llaman entre sí. Este diseño presenta los mismos problemas que un único procedimiento recursivo, pero puede ser más difícil de detectar y depurar.

Llamar a con paréntesis. Cuando un procedimiento Function se llama de forma recursiva, debes seguir el nombre del procedimiento entre paréntesis, incluso si no hay ninguna lista de argumentos. De lo contrario, el nombre de la función se toma como representa el valor devuelto de la función.

Pruebas Si escribes un procedimiento recursivo, debes probarlo con mucho cuidado para asegurarte de que siempre cumple alguna condición de limitación. También debes asegurarte de que no se puede agotar la memoria debido a que hay demasiadas llamadas recursivas.

Consulte también