Академический Документы
Профессиональный Документы
Культура Документы
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
n que est
en la primera fila de la tabla, y deber entregar como salida el nmero Fnque est en su misma columna.
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 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
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.