Procedimientos recursivos (Visual Basic)

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

En el siguiente procedimiento se utiliza la recursividad para calcular el factorial de su argumento original.

Function factorial(ByVal n As Integer) As Integer
    If n <= 1 Then
        Return 1
    Else
        Return factorial(n - 1) * n
    End If
End Function

Consideraciones sobre procedimientos recursivos

Condiciones de limitación. Debe designar un procedimiento recursivo para probar al menos una condición que pueda poner fin a la recursividad; también debe supervisar los casos en los que no se satisface ninguna condición dentro de un número razonable de llamadas recursivas. Si no existe al menos una condición que pueda cumplirse sin errores, el procedimiento corre un riesgo elevado de ejecutarse en un bucle infinito.

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

Eficacia. Casi siempre se puede sustituir un bucle por la recursividad. Un bucle no tiene la sobrecarga de transferir argumentos, inicializar el almacenamiento adicional y devolver valores. Su rendimiento puede ser mucho mayor sin llamadas recursivas.

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

Llamadas con paréntesis. Cuando un procedimiento Function se llama a sí mismo de manera recursiva, debe agregar paréntesis detrás del nombre del procedimiento, aun cuando no exista una lista de argumentos. De lo contrario, se considerará que el nombre de la función representa al valor devuelto por ésta.

Pruebas Si escribe un procedimiento recursivo, debe probarlo minuciosamente para asegurarse de que siempre cumple ciertas condiciones de limitación. También debería comprobar que la memoria no resulta insuficiente debido a la gran cantidad de llamadas recursivas.

Vea también

Tareas

Solucionar problemas de procedimientos (Visual Basic)

Solución de problemas de excepciones: System.StackOverflowException

Referencia

StackOverflowException

Conceptos

Procedimientos en Visual Basic

Subprocedimientos (Visual Basic)

Procedimientos de función (Visual Basic)

Procedimientos de propiedad (Visual Basic)

Procedimientos de operador (Visual Basic)

Argumentos y parámetros de procedimiento (Visual Basic)

Sobrecarga de procedimiento (Visual Basic)

Estructuras de bucles (Visual Basic)