Autor Tema: fibonacci java recursivo explicación cómo obtener sucesión paradigma POO código  (Leído 2480 veces)

miguelop02

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola, ¿habría alguien que me haga el favor de pasarme una manera de hacer el ejercicio de fibonacci con el paradigma poo (programación orientada a objetos)?
« Última modificación: 12 de Marzo 2022, 14:51 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: AYUDA POO FIBONACCI
« Respuesta #1 en: 02 de Octubre 2021, 21:17 »
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:
Código: [Seleccionar]
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:
Código: [Seleccionar]
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:
Citar

      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
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".