Recursividad Un objeto se dice que es recursivo si él mismo forma parte de su definición. Ejemplos de objetos recursivos: Una locomotora es un tren Un tren es un vagón enganchado a un tren El factorial de 0 es 1 El factorial de un numero natural es el producto de dicho numero por el factorial de su antecesor
Algoritmo recursivo Un programa o algoritmo se denomina recursivo si está directa o indirectamente basado en sí mismo
Algoritmo recursivo Todo programa recursivo debe tener: Condición de parada o punto conocido del dominio que ponga fin a la recursividad. Al menos una llamada a sí mismo. (invocación recursiva)
Algoritmo recursivo – Ejemplo Ejemplo: Factorial | 1 si n = 0 Fact (n) = | | n* Fact (n-1) si n > 0 Algoritmo: Function fact(n: integer):integer; /* calcula n! */ Begin if (n = 0) then fact := 1 else fact := n* fact(n-1); End;
¿Cómo se evalúa un algoritmo recursivo? fact (5) = 5 * fact (4) fact (4) = 4 * fact (3) fact (3) = 3 * fact (2) fact (2) = 2 * fact (1) fact (1) = 1 * fact (0) fact(0) = 1 Ejemplo: factorial, n=5 120 24 6 2 1 1
Ventajas Soluciones elegantes y fáciles de entender. Soluciones más simples.
Desventajas Si la profundidad de la recursión (es decir, el número de invocaciones recursivas) es muy grande puede traer problemas de memoria RAM y se produce un desbordamiento. Ocurre cuando el problema es demasiado grande para la memoria RAM o cuando no converge al valor del punto de parada (error de diseño de la solución)
Programación Orientada a Objetos