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();
    }
}
 





38 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
    Respuestas
    1. la verdad no entiendo nada

      Eliminar
    2. Es mucho más elegante, limpia y eficiente la solución original que ofrece Enrique.

      Eliminar
  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
    3. Hola Salvador, eso es debido al rando de valores de cada tipo de datos. Una variable de tipo byte solo puede contener valores desde -128 hasta 127. En esta entrada del blog tienes los tipos de datos básicos en Java y sus rangos http://puntocomnoesunlenguaje.blogspot.com.es/2012/04/tipos-de-datos-java.html
      Saludos

      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
  12. Respuestas
    1. Gracias Rubí, espero que te estén sirviendo de ayuda.

      Eliminar
  13. public class Pruebas {

    public static void main(String[] args) {
    int fibo1 = 0;
    int fibo2 = 1;

    System.out.print(fibo1 + " ");
    for (int i = 0; i <= 10; i++) {
    System.out.print(fibo2 + " ");
    fibo2 = fibo1 + fibo2;
    fibo1 = fibo2 - fibo1;
    }

    }
    }

    ResponderEliminar
  14. public static void main(String[] args) {
    int num = 10,
    inicio = 1,
    incremento = 0,
    proceso = 0;

    System.out.print (inicio + " + ");
    for(int i = 0; i<=num; i++){

    proceso = incremento + inicio;

    incremento = inicio;
    inicio = proceso;

    System.out.print(inicio + " + ");
    }
    }

    ResponderEliminar
  15. Mi código recursivo tiene un O(n) de mayor costo en tiempo y recursos

    static int fibo (int n)
    {
    if ((n == 0) || (n == 1))
    return 1;
    else
    return fibo(n-1) + fibo(n-2);
    }

    ResponderEliminar
  16. public static void main (String[] args)throws IOException
    {
    BufferedReader tecla=new BufferedReader(new InputStreamReader(System.in));
    int X, A, B, C;
    System.out.println(" CUANTOS NUMEROS DESEAS UD. : ");
    X = Integer.parseInt(tecla.readLine());
    System.out.print(" LOS " + X + " NUMEROS FIBONACCI ");
    A = 0;
    B = 1;
    C = 0;
    while (C < X)
    {
    C = C + 1;
    System.out.println(C + ".-NUMERO FIBONACCI.- " + A);
    A = A + B;
    B = A - B;
    }


    }
    }

    ResponderEliminar

  17. Fibonacci in ruby

    fibo1 = 0
    fibo2 = 1
    (1..20).each do |i|
    puts "#{fibo2} "
    fibo2 = fibo1 + fibo2
    fibo1 = fibo2 - fibo1
    end

    ResponderEliminar
  18. Alguien sabe hacer este ejercicio
    Dada la sucesión definida como ��������=������������−3+������������−2+������������−1se pide diseñar un algoritmo que calcule en tiempo logarítmico el término ��������.

    Entrada
    La entrada consistirá de varias líneas. La primera línea contiene un único número que indica el número de casos, m. A continuación aparece m líneas conteniendo cada una un valor para n.
    Salida
    La salida contendrá m líneas cada una de las cuales muestra el valor �������� para cada valor, n, de la entrada.

    ResponderEliminar
  19. ¿para pasarlo a c++ como seria?

    ResponderEliminar
  20. ayudaaaaa necesito un programa que lea 15 numeros y saque la suma y el promedio de estos

    ResponderEliminar
  21. Este es el mío en Java.
    No logré hacer que imprimiera desde el cero si alguien me ayudaría se los agradecería muucho
    dejo mi correo por si las moscas o si alguien más tiene dudas o necesita ayuda en algún programa: alonss94@gmail.com
    public class Fibonacci {

    public static int Fibonacci (int f)
    {
    if (f==0||f==1)
    {
    return 1;
    }else
    return Fibonacci(f-1)+ Fibonacci(f-2);
    }

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    int tam,res=0;

    System.out.println("------Sucecion de Fibonacci------");
    System.out.print("Ingrese el tamaño de la suceción: ");
    tam= scan.nextInt();

    for(int i=0; i<=tam;i++)
    {
    res= Fibonacci(i);
    System.out.print(res + " ");
    }
    System.out.println();
    }

    }

    ResponderEliminar