Hola
Lo primero es crear una clase Fibonacci, pensando que atributo podemos necesitar.
Una sucesión de números (Fibonacci o no...) tiene una
longitud, es decir, la cantidad de números que van a componer esa sucesión.
Así que se podría ser su atributo.
Luego, obviamente, uno de sus métodos será un código para calcular los valores de la sucesión.
Hay una forma de hacerlo mediante una función recursiva que recibe una posición de la sucesión y devuelve el valor que corresponde.
Así luego en otro método con un bucle for que se repita tantas veces como indica la longitud, nos dará cada valor correspondiente a cada posición de la sucesión y la podremos mostrar en pantalla.
Esta podría ser la clase
Fibonacci:
public class Fibonacci {
private int longitud;
public Fibonacci(int longitud) {
this.longitud = longitud;
}
public int getLongitud() {
return longitud;
}
public void setLongitud(int longitud) {
this.longitud = longitud;
}
public void mostrarSucesion() {
System.out.println("\nSucesión de longitud "+ longitud +":");
for (int i = 0; i < longitud; i++) {
System.out.print(fibonacci(i) + " ");
}
}
/*
* Función recursiva para calcular el valor correspondiente
* según la posición indicada
*
*/
private int fibonacci(int posicion) {
if (posicion > 1)
return fibonacci(posicion-1) + fibonacci(posicion-2);
else if (posicion == 1)
return 1;
else if (posicion == 0)
return 0;
else {
System.out.println("ERROR: Posición no puede ser valor negativo");
return -1;
}
}
}
Luego en otra clase con método main(), podemos declarar un objeto de la clase
Fibonacci y con un pequeño menú dar opción de mostrar la sucesión y de cambiar el valor de la longitud.
Algo como esto:
public class PruebaFibonacci {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
Fibonacci fibo = new Fibonacci(10);
int seleccion = 0;
while (seleccion != 3) {
System.out.println("\n\n\t\tSUCESION FIBONACCI");
System.out.println("\t\t-------- ---------");
System.out.println("Longitud actual: " + fibo.getLongitud());
System.out.println("\n[1] -- Mostrar sucesión");
System.out.println("[2] -- Cambiar longitud");
System.out.println("[3] -- SALIR");
System.out.print("Elija opción: ");
seleccion = teclado.nextInt();
switch(seleccion) {
case 1:
fibo.mostrarSucesion();
break;
case 2:
System.out.print("\nNueva longitud: ");
fibo.setLongitud(teclado.nextInt());
break;
case 3:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("\nOpción equivocada");
}
}
teclado.close();
}
}
Si lo probamos, en pantalla tenemos este resultado:
SUCESION FIBONACCI
-------- ---------
Longitud actual: 10
[1] -- Mostrar sucesión
[2] -- Cambiar longitud
[3] -- SALIR
Elija opción: 1
Sucesión de longitud 10:
0 1 1 2 3 5 8 13 21 34
SUCESION FIBONACCI
-------- ---------
Longitud actual: 10
[1] -- Mostrar sucesión
[2] -- Cambiar longitud
[3] -- SALIR
Elija opción: 2
Nueva longitud: 30
SUCESION FIBONACCI
-------- ---------
Longitud actual: 30
[1] -- Mostrar sucesión
[2] -- Cambiar longitud
[3] -- SALIR
Elija opción: 1
Sucesión de longitud 30:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229
SUCESION FIBONACCI
-------- ---------
Longitud actual: 30
[1] -- Mostrar sucesión
[2] -- Cambiar longitud
[3] -- SALIR
Elija opción: 3
FIN DE PROGRAMA