Fibonacci en java

La serie de fibonacci la forman una serie de números tales que:

El primer término de la serie es el número 1
El segundo término de la serie es el número 1
Los siguientes términos de la serie de fibonacci se obtienen de la suma de los dos anteriores:

1, 1, 2, 3, 5, 8, 13, .....  

Vamos a escribir el programa java que muestra los N primeros números de la serie. El valor de N se lee por teclado.


import java.util.*;
/**
 * Serie de Fibonacci en Java
 * Programa que imprima los N primeros números de la serie de Fibonacci.
 * El primer número de la serie es 1, el segundo número es 1 y cada uno de los
 * siguientes es la suma de los dos anteriores.
 * 1, 1, 2, 3, 5, 8, 13,  ....... , N
 * @author Enrique
 */
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int numero,fibo1,fibo2,i;
        do{
            System.out.print("Introduce numero mayor que 1: ");
            numero = sc.nextInt();
        }while(numero<=1);
        System.out.println("Los " + numero + " primeros términos de la serie de Fibonacci son:");


        fibo1=1;
        fibo2=1;


        System.out.print(fibo1 + " ");
        for(i=2;i<=numero;i++){
             System.out.print(fibo2 + " ");
             fibo2 = fibo1 + fibo2;
             fibo1 = fibo2 - fibo1;
        }
        System.out.println();
    }
}
 





21 comentarios:

  1. amigo como lo pasarias a un algoritmo?
    ps antes de pasarlo a java me lo arias porfa?

    ResponderEliminar
  2. la serie fibo comienza en cero, no en uno xd

    ResponderEliminar
    Respuestas
    1. pfff ps solo es cambiar a fibo1=0;
      lol

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Respuestas
    1. class Ejercicio{

      public static int fibonacci(int n)
      {
      if(n<2) return 1;
      else
      return fibonacci(n-1) + fibonacci(n-2);
      }

      Eliminar
  5. System.out.println("introduzca el tamaño de la serie: ");
    int n=Teclado.readInt();
    int x =0;
    int y =0;
    int solucion;

    for(int i=1;i<n+1;i++){
    if(i==1 || i==2){
    System.out.print("1, ");
    x=1;
    y=1;
    }
    else{
    solucion=x+y;
    System.out.print(solucion+",");
    x=y;
    y=solucion;
    }

    }

    }

    Esta sol me gusta más...

    ResponderEliminar
  6. int veces, fibonacci = 0, anterior = 1, penultimo;

    System.out.print("Ingrese cantidad de veces ");
    veces = leer.nextInt();

    for (int i = 1; i <= veces; i++)
    {
    penultimo = fibonacci;
    fibonacci = anterior + fibonacci;
    anterior = penultimo;

    System.out.print(fibonacci + " , ");
    }


    Con eso te ahorras forzar que muestre las dos veces el 1 mediante un print

    ResponderEliminar
    Respuestas
    1. if (n != 1 || n != 2) {
      for (int i = 1; i <= n; i++) {
      System.out.print(a+", ");
      a = a + b;
      b = a - b;
      }
      } else {
      System.out.println("1");
      }

      Eliminar
    2. De hecho, ni siquiera es necesario el if-else que puse arriba.

      for (int i = 1; i <= n; i++) {
      System.out.print(a+", ");
      a = a + b;
      b = a - b;
      }

      y te ahorras memoria ;)

      Eliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Yo lo solucioné así:

    --------------------------------------- Clase principal

    public class Fibonacci {

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
    // TODO code application logic here
    Contar a = new Contar();
    a.Cuentas(1);
    }

    }


    ----------------------------------- clase secundaria

    public class Contar {

    private int c, a;

    public void Cuentas(int b) {

    for (int i = 0; i < 15; i++) {

    if (b <= 1) {
    a = b + 1;
    System.out.println("b: " + b);
    System.out.println("a: " + a);
    b = b + a;
    } else {
    System.out.println("b: " + b);
    c = b + a;
    System.out.println("c: " + c);
    a = b + c;
    System.out.println("a: " + a);
    b = a + c;

    }

    }

    }

    }

    ResponderEliminar
  9. y orientado a objetos como queda?

    ResponderEliminar
  10. Este es mi código, soy novato en java, me gustaría que lo valoren gracias
    ------------------------------------------------------------------------------------------------------------------
    package ejercicios5;

    import java.util.Scanner;

    /**
    *
    * @author Villas
    */

    public class Ejercicio8 {

    public static void main(String[] args) {
    int num;
    int fib1 = 1;
    int fib2 = 1;
    Scanner lectura = new Scanner(System.in);

    System.out.println("Inserte un numero entero");
    num = lectura.nextInt();

    for (int i = 0 ; i < num; i++){
    System.out.println(fib1 +" , " +fib2);
    fib1 = fib1 + fib2;
    fib2 = fib1 + fib2;
    }

    }

    }

    ResponderEliminar
    Respuestas
    1. he observado que cuando se alcanza el limite de la variable salen números negativos por ejemplo si se declaran las variables flib como byte solo hace 5 procesos correctos en cambio si se declara como int realiza mas e incluso mas con long

      Eliminar
    2. he observado que cuando se alcanza el limite de la variable salen números negativos por ejemplo si se declaran las variables flib como byte solo hace 5 procesos correctos en cambio si se declara como int realiza mas e incluso mas con long

      Eliminar
  11. Este es mi código, soy novato en java, me gustaría que lo valoren gracias
    ------------------------------------------------------------------------------------------------------------------
    package ejercicios5;

    import java.util.Scanner;

    /**
    *
    * @author Villas
    */

    public class Ejercicio8 {

    public static void main(String[] args) {
    int num;
    int fib1 = 1;
    int fib2 = 1;
    Scanner lectura = new Scanner(System.in);

    System.out.println("Inserte un numero entero");
    num = lectura.nextInt();

    for (int i = 0 ; i < num; i++){
    System.out.println(fib1 +" , " +fib2);
    fib1 = fib1 + fib2;
    fib2 = fib1 + fib2;
    }

    }

    }

    ResponderEliminar