La serie de Fibonacci en una chimenea |
7.29 (La Serie de Fibonacci) La serie de Fibonacc 0, 1, 1, 2, 3, 5, 8, 13, 21, .... empieza con los números 0 y 1, y tiene la propiedad de que cada término sucesivo es la suma de los dos términos anteriores.
a) Escriba un método llamado fibonacci(n) que calcule el enésimo número de Fibonacci.
b) Determine el número más grande de Fibonacci que puede desplegar su sistema.
c) Modifique la parte a) del programa para que utilice double en lugar de int para que calcule y devuelva números de Fibonacci, y utilice este programa modificado para repetir la parte b)
_____________________________________________________________________________________
Solución: A continucación se presenta el código y una ejecución del programa. En los comentarios de detalla el algoritmo seguido. Deteminar cual es el número de Fibonacci más grande que imprime su computadora se obtiene por la ejecución del programa. Con respecto a éste punto, tal vez sería de utilidad leer ésta entrada: La representación de los enteros en complemento a dos
Este código debe guardarse con el nombre UsaFibonacci.java
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * LOS NUMEROS DE FIBONACCI * * ________________________ * * * * Este programa despliega el enesimo numero de fibonacci * * LO QUE RECIBE: Este programa recibe un entero n del usuario * * LO QUE RETORNA: Este programa retorna el n-esimo numero de fibonacci * *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * ALGORITMO * * _________ * * * * El primer numero de fibonacci (fib1) es 0 * * El segundo numero de Fibonacci (fib2) es 1 * * * * Si el usuario introduce 1 o 2, entonces es necesario desplegar f1 o f2 * * Si el usuario introduce un entero positivo mayor que 2, entonces * * desde 2 hasta n (el numero introducido) * * fibn = fib1 + fib2 * * temp = fib2 * * fib2 = fibn * * fib1 = temp * * * * Finalmente despliega el valor de fibn * *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ import java.util.Scanner; public class UsaFibonacci { // Abre clase UsaFibonacci public static void main(String args[]) { // Abre main int numero; Scanner entrada = new Scanner(System.in); Fibonacci miObjeto = new Fibonacci(); System.out.println("\nEste programa calcula numeros de Fibonacci."); do { System.out.println("Que numero de Fibonacci quiere?"); System.out.println("\nEl numero debe ser positivo."); numero = entrada.nextInt(); } while ( 0 > numero ); if ( 1 == numero ) System.out.printf("\nEl numero de Fibonacci %d es %d\n", numero, 0); else { if ( 2 == numero ) System.out.printf("\nEl numero de Fibonacci %d es %d\n", numero, 1); if ( 2 != numero) System.out.printf("\nEl numero de Fibonacci %d es %d\n", numero, miObjeto.Principal(numero)); } } // Cierra main } // Cierra clase UsaFibonacciEl siguiente código debe guardarse con el nombre Fibonacci.java
import java.util.Scanner; public class Fibonacci { // Abre clase publica Fibonacci public int Principal(int n) { // Abre metodo Principal int fibonaccin2 = 1; int fibonaccin1 = 0; int fibonaccin = 0; Scanner entrada = new Scanner(System.in); for ( int i = 3; i <= n; i++) { fibonaccin = fibonaccin2 + fibonaccin1; fibonaccin1 = fibonaccin2; fibonaccin2 = fibonaccin; } return fibonaccin; } // Cierra metodo Principal } // Cierra clase publica Fibonacci
Una ejecución del programa es la siguiente. Observe que en caso de introducir un número negativo, simplemente se solicita de nuevo uno positivo.
Este programa calcula numeros de Fibonacci. Que numero de Fibonacci quiere? El numero debe ser positivo. -1 Que numero de Fibonacci quiere? El numero debe ser positivo. 7 El numero de Fibonacci 7 es 8
hola soy octavio muchisimas gracias por el tutorial pero hay un problemita porque sale defini el mudoto principal del siguente
ResponderEliminarBuenas!
ResponderEliminarEn el método Principal, se hace dos veces lo mismo. No hace falta utilizar la variable temp si se usa esta lógica:
fibonaccin = fibonaccin2 + fibonaccin1;
fibonaccin1 = fibonaccin2;
fibonaccin2 = fibonaccin;
PD: Al ser un ejercicio del capítulo 7 se podría usar un arreglo para resolverlo.
Hola, Anónimo. Gracias por la sugerencia. Ya la incluí en el programa. La variable temp estaba de más. Saludos.
Eliminara mi no me salio asi io lo modiffiqe en java y del ejercicio que puso usted le cmbie el orden
Eliminarfibonaccin1 = fibonaccin2;
fibonaccin2 = fibonaccin;
fibonaccin = fibonaccin2 + fibonaccin1;
ahi si sale toda la serie fubonaccin
por que no suben el 7.28 de libro es quee no puedo hacerlo
ResponderEliminarHola, Edgar. Supongo que te refieres al de la liebre y la tortuga. Éste lo puedes encontrar en C++: La Carrera Entre la Liebre y la Tortuga.
Eliminar