Es un algoritmo que expresa la solución de un problema en términos
de una llamada a sí mismo, a eso se le conoce como llamada
recursiva o recurrente.
Ejemplo de Recursividad
Serie Fibonacci: Se generan mediante el
establecimiento de dos valores que son F0 = 0, F1 = 1, y
aplicarlos a la fórmula siguiente: Fn = Fn-1 + Fn-2
Las funciones se llaman a
sí mismas, así se evita el uso de bucles y
otros iteradores y deja de hacerlo
cuando se cumple la condición de
parada.
Tipos
Recursividad directa
Se presenta cuando el método se manda
llamar a sí mismo dentro de su propio cuerpo
de instrucciones.
Recursividad Indirecta
Se manifiesta cundo un método llama a
otro y dentro del segundo se manda llamar
al primero.
Existe la llamada a métodos de forma
encadenada y al terminar el último
método llamado, transfiere el control al
anterior, hasta llegar al método que inicio
la serie de llamadas.
Métodos Recursivos
Divide y vencerás
Permite resolver
problemas dividiendo el
problema original en
subproblemas más
pequeños.
Backtracking
Se caracteriza por
recorrer todo el espacio
de soluciones del
problema en busca de la
solución óptima (o la
primera solución).
Ventajas y
Desventajas
Ventaja: Es una función muy poderosa capaz de
enumerar cualquier estructura arbitraria por
compleja que sea.
Desventaja: Es más lento y ocupa más espacio en
memoria
Recursividad vs. Iteración
1.- Se realiza una repetición.
Iteración: repite el cuerpo del bucle.
Recursividad: repite las llamadas al
método recursivo.
2.- Tiene una condición de terminación.
Iteración: termina cuando se imcumple
la condición de continuación del bucle.
Recursividad: termina cuando una
llamada alcanza el caso base,
desencadenando una secuencia de
vuelta atrás.
3- El diseño de ambas deben converger
a la solución (principio de convergencia,
y que no se salten la condición de
terminación).
Iteración: se llega a cumplir la condición
de terminación (esto debe
garantizarse).
Recursividad: se debe garantizar que
se llegue al caso base.