calcular el n-esimo elemento de la serie de fibonacci

Anuncio
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.
Descargar