martes, 22 de septiembre de 2020

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 Fibonacci. Recuerden 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 áurea, 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 en el que se repite 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:
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("");
}
}
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();
}
}
 


No hay comentarios.:

Publicar un comentario