Procedimientos recursivos
Actualización: noviembre 2007
Un procedimiento recursivo es aquél que se llama a sí mismo. En general, ésta 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
Procedimientos de solución de problemas
Solución de problemas de excepciones: System.StackOverflowException
Conceptos
Procedimientos en Visual Basic
Argumentos y parámetros de procedimiento