martes, 21 de febrero de 2012

Deitel_Java_7_29 (Los Números de Fibonacci en Java)


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 UsaFibonacci
El 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

6 comentarios:

  1. hola soy octavio muchisimas gracias por el tutorial pero hay un problemita porque sale defini el mudoto principal del siguente

    ResponderEliminar
  2. Buenas!
    En 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.

    ResponderEliminar
    Respuestas
    1. Hola, Anónimo. Gracias por la sugerencia. Ya la incluí en el programa. La variable temp estaba de más. Saludos.

      Eliminar
    2. a mi no me salio asi io lo modiffiqe en java y del ejercicio que puso usted le cmbie el orden


      fibonaccin1 = fibonaccin2;
      fibonaccin2 = fibonaccin;
      fibonaccin = fibonaccin2 + fibonaccin1;

      ahi si sale toda la serie fubonaccin

      Eliminar
  3. por que no suben el 7.28 de libro es quee no puedo hacerlo

    ResponderEliminar
    Respuestas
    1. Hola, 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

Related Posts Plugin for WordPress, Blogger...