CALCULAR EL N-ESIMO ELEMENTO DE LA SERIE DE FIBONACCI Programación Dinámica La serie de Fibonacci se basa en el principio de que un término se calcula sumando los dos términos anteriores así: F(n) = F(n-1) + F(n-2) Los primeros términos de la serie son: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, .... La versión recursiva de la serie de Fibonacci se basa en su definición matemática recursiva que dice: Esta solución tiene una complejidad exponencial de O(2n), ya que con los dos llamados recursivos se deben recalcular muchas veces algunos términos. Ejemplo: Calcular el quinto término de la serie de Fibonacci. Se puede apreciar la cantidad de cálculos que se repiten: Fibo(1): 2 veces, Fibo(2): 3 veces, Fibo(3): 2 veces La versión recursiva del Fibonacci, se implementa en lenguaje C de la siguiente manera: int fiboRec(int n) { if (n==1 || n==2) return 1; else return (fibo(n-1)+fibo(n-2)); } int fiboPD(int n, int tabla[]) { if (tabla[n]!=0) Con programación dinámica se modifica el algoritmo recursivo añadiéndole una tabla para así almacenar los resultados parciales y calcular mas eficientemente el resultado final, de tal manera que como la técnica lo dice no calcula dos veces el mismo término. La solución con programación dinámica tiene una complejidad O(n) return (tabla[n]); else if (n==1 || n==2) { tabla[n]=1; return(tabla[n]); } else { tabla[n]=fiboPD(n-1,tabla)+fiboPD(n-2,tabla); return(tabla[n]); } } Donde: n es el elemento de la serie de Fibonacci que se quiere calcular. tabla es el arreglo donde se guardan los primeros n elementos de la serie.