Calculando la Serie de Fibonacci con Java - Solución Iterativa

Hola a todos, hoy vamos a diseñar una clase que nos permita calcular o más bien construir la Serie de FibonacciRecuerden que la Serie de Fibonacci inicia con el número 0 y 1 y continua sumando los dos términos para obtener el siguiente, en este caso: 0 + 1 = 1, lo que da: 0, 1, 1. Volviendo a calcular Fibonacci tenemos: 1 + 1 = 2, lo que da: 0, 1, 1, 2 el siguiente termino es: 1 + 2 = 3 etc. Como cálculo adicional, nuestra clase nos va a servir para calcular el cociente entre un termino actual de la serie y el termino anterior. Como vamos a ver en la solución del programa, entre más crezca la Serie Fibonacci, el resultado de este cociente converge a uno de esos números extraños y que podemos encontrar en la naturaleza, el arte, las matemáticas e incluso las finanzas: 1,618 más conocido como la proporción aúrea, número de Dios o simplemente Phi (ver Wikipedia).

En nuestra aplicación, vamos a construir la serie haciendo uso de la instrucción for( variable inicialización del ciclo; control del ciclo; incremento de la variable), que en el caso de nuestro programa, lo tenemos en la clase SerieFibonacci.java en la línea 33: for(int i = 3; i <= total_terminos; i++)


En esta clase, la instrucción for lo que hace es iniciar la variable i de tipo entero igualándola a 3 e inicia un proceso de repetir el código que se encuentra en las llaves del for { } (en nuestro caso el código que esta entre las líneas 33 y 40), repitiéndolo hasta que la variable i sea mayor que la variable total_terminos. 

Para asegurar que la condición se cumpla en algún momento y no se genere un ciclo de repetición infinito, la variable i se incrementa en 1 (en Java i++ es igual a i = i +1) cada vez que se cumple un ciclo.

Veamos entonces en que consiste esta clase y como se implementa en el programa: SerieFibonacciTest.java


Este es el código fuente:

SerieFibonacci.java:


package series;

public class SerieFibonacci {

 private long termino_inicial = 0;
 private long termino_siguiente = 1;
 private long termino_temp = 0;

 private int total_terminos;
 
 public SerieFibonacci(int total_terminos) {
  this.total_terminos = total_terminos;
 }

 public int getTotal_terminos() {
  return total_terminos;
 }

 public void setTotal_terminos(int total_terminos) {
  this.total_terminos = total_terminos;
  this.termino_inicial = 0;
  this.termino_siguiente = 1;
  this.termino_temp = 0;
 }
 
 public void generarFibonacci() {
  
  System.out.printf("%s%20s%17s%n", "Termino", "Fibonacci", "Golden Ratio");
  System.out.printf("%4d%, 20d%, 20.10f%n", 1, termino_inicial, 0.0);
  System.out.printf("%4d%, 20d%, 20.10f%n", 2, termino_siguiente, 0.0);

  
  for(int i = 3; i <= total_terminos; i++) {
   
   termino_temp = termino_inicial + termino_siguiente;
   System.out.printf("%4d%, 20d%, 20.10f%n", i, termino_temp, 
     (float)(termino_temp)/(float)(termino_siguiente) );
   termino_inicial = termino_siguiente;
   termino_siguiente = termino_temp;
  }
  
  System.out.println("");
  
 }
 
}

SerieFibonacciTest.java:


package series;

public class SerieFibonacciTest {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  SerieFibonacci fibonacci = new SerieFibonacci(50);
  fibonacci.generarFibonacci();
  
  fibonacci.setTotal_terminos(10);
  fibonacci.generarFibonacci();
  
 }

}



Hasta la próxima.
  

Comments