Sunteți pe pagina 1din 5

Ejemplo: nmeros de Fibonacci

Como ejemplo, consideraremos el siguiente problema computacional: Entrada: un nmero entero n. Salida: el n-simo nmero de Fibonacci.

Entendiendo el problema
Los nmeros de Fibonacci

Fk son una sucesin de nmeros

naturales definidos de la siguiente manera:

F0 F1 Fk =0, =1, =Fk1+Fk2,cuando k2.


En palabras simples, la sucesin de Fibonacci comienza con 0 y 1, y los siguientes trminos siempre son la suma de los dos anteriores. En la siguiente tabla, podemos ver los nmeros de Fibonacci desde el 0-simo hasta el duodcimo.

n 0 1 2 3 4 5 6 7 8 9 10 11 12 ... Fn 0 1 1 2 3 5 8 13 21 34 55 89 144 ...


Nuestro algoritmo recibir como entrada un nmero

n que est

en la primera fila de la tabla, y deber entregar como salida el nmero Fnque est en su misma columna.

Proponiendo una estrategia


Una observacin til para simplificar nuestro problema es que no necesitamos llenar una tabla como la de arriba, pues a medida que vamos avanzando hacia la derecha, siempre necesitamos conocer solamente los dos ltimos valores anteriores. Por ejemplo, cuando necesitamos calcular F9, nos basta conocer F8=21 y F7=13. Los valores de F6 y anteriores ya no interesan.

El algoritmo, por lo tanto, recordar en cada paso el nmero de Fibonacci actual y el anterior. Para ello ocuparemos dos variables, llamadas actual y anterior. En cada paso, las variables sern actualizadas de la siguiente manera:

anterior tomar el valor que tena actual; actual pasar a ser la suma de los valores que

tenan anterior yactual. Para saber cundo hemos llegado al nmero deseado, hay que llevar la cuenta de en qu paso vamos. Para ello, utilizaremos una variable adicional que denominaremos cuenta. En cada paso, la iremos incrementando en 1. La siguiente tabla muestra cmo cambiarn las variables a medida que el algoritmo avanza.
cuenta 0 1 2 3 4 5 6 7 ... anterior 0 1 1 2 3 5 8 13 ... actual 1 1 2 3 5 8 13 21 ...

Diseando el algoritmo
Lo primero de lo que nos ocuparemos es de cmo actualizar anterior yactual como lo propusimos ms arriba. La manera ingenua (e incorrecta) de usar las asignaciones es la siguiente:
anterior = actual actual = anterior + actual

El problema aqu es que ambas variables dependen una de la otra. Cuando cambiamos el valor de una, el valor previo (que es el que nos interesa) se pierde para siempre. La solucin es introducir una variable adicional, para guardar uno de los valores mientras actualizamos las variables. Lo que

haremos ser guardar el resultado de la suma en una variable nueva. Las asignaciones correctas son:
suma = anterior + actual anterior = actual actual = suma

La cuenta la actualizaremos sumndole 1 en cada paso:


cuenta = cuenta + 1

Esta operacin se puede escribir tambin de manera abreviada:


cuenta += 1

La cuenta indica qu nmero de Fibonacci (es decir, qu valor de k, segn la definicin de arriba) es el que est en la variable actual. Como lo que buscamos es el n-simo nmero de Fibonacci, debemos detener la iteracin cuando cuenta haya llegado hasta n. El nico caso que no hemos cubierto es n=0. Este caso es especial porque en l no existe un nmero anterior. La manera ms sencilla de cubrirlo es comenzar el algoritmo preguntando si estamos en este caso especial. Si es as, ya sabemos que la respuesta es 0. En caso contrario, usamos el algoritmo tal como lo habamos diseado.

El algoritmo terminado

Tarea
1. Modificar el algoritmo de arriba para resolver el siguiente problema computacional: Entrada: un nmero entero n. Salida:

los

n primeros nmeros de Fibonacci. Por ejemplo, para n=7, el algoritmo debe


entregar 0 1 1 2 35 8. 2. Modificar el algoritmo de arriba para resolver el siguiente problema computacional: Entrada:

un nmero entero

m.

Salida:
s o no, dependiendo de si

m es o no un nmero de Fibonacci. Por ejemplo, para m=17, el algoritmo debe decir no. Param=21, el algoritmo debe decir s.

S-ar putea să vă placă și