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

62 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
  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
    3. Yo tampoco entiendo ni madres. #ValeVergaLaVida.

      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
    3. exelente aporte, muchas gracias

      Eliminar
    4. exelente aporte, muchas gracias

      Eliminar
    5. la corrección de las 6:43 debería fallar en el calculo numero 47

      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. 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
  15. 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

  16. Fibonacci in ruby

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

    ResponderEliminar
  17. 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
  18. ¿para pasarlo a c++ como seria?

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

    ResponderEliminar
  20. 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
    Respuestas
    1. asi lo pude hacer amigo public static void main(String[] args) {
      sc = new Scanner (System.in);

      System.out.println("Ingrese la cantidad :");
      int can=sc.nextInt();
      int n1=0,n2=0,aux1,aux2;
      for(int v2=0; v2<can;v2++){

      aux1=n1+n2;
      System.out.println(aux1);
      aux2=aux1-n2;
      n2=aux2;
      n1=aux1;
      if(aux1==0){
      n2=1;
      }
      }
      }

      Eliminar
  21. mostrar en pantalla todos los números entre 0 y 150 que sean divisibles entre 15. ayuda pls!

    ResponderEliminar
  22. necesito el mismo código pero usando solamente while

    ResponderEliminar
  23. Números Pares menores a 1000 que aparecen en la suceción fibonacci??
    ayuda

    ResponderEliminar
  24. lo termine :) .lo comparto a seguir dándole chicos saludos y suerte en este camino ;)

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

    System.out.println("Ingrese la cantidad :");
    int can=sc.nextInt();
    int n1=0,n2=0,aux1,aux2;
    for(int v2=0; v2<can;v2++){

    aux1=n1+n2;
    System.out.println(aux1);
    aux2=aux1-n2;
    n2=aux2;
    n1=aux1;
    if(aux1==0){
    n2=1;
    }
    }
    }

    ResponderEliminar
    Respuestas
    1. de esta forma da tal cual parte de (0) 0.1.1.2.3.5.8.13........

      Eliminar
  25. String strVeces = JOptionPane.showInputDialog("ingrese numero de operandos: ");
    int veces = Integer.parseInt(strVeces);

    int [] num = new int [veces];
    num[0] = 0;
    num[1] = 1;

    for (int i = 0, j = 1, k = 2; i<(veces-2); i++, j++, k++){

    num[k] = num[i] + num[j];
    System.out.println(num[k]);

    ResponderEliminar
  26. me pueden ayudar con un programa de serie fibonacci 0 1 1 2 3 5 8 13 y muestre 6 impares 1 par 1 cero

    ResponderEliminar
  27. Me puedes ayudar en que si ingresó un numero como verificar que hace parte de la serie de fibonacci

    ResponderEliminar
  28. Yo tengo este codigo si la serie fibo comienza en o

    public class laserie_fibonaci {

    public static void main(String args[]) {


    int n,nal=1,nan=0,nuv,i=0;
    Scanner l=new Scanner(System.in);


    System.out.println("Escribe cuantos numeros de la serie fibonacci quieres ver: ");
    n=l.nextInt();





    System.out.println(0);
    System.out.println(1);





    while(nan<=nal&&i<n-2) {

    nuv=nan+nal;
    System.out.println(nuv);
    nan=nal;
    nal=nuv;
    i++;





    }










    }


    }

    ResponderEliminar
  29. Me ayudarían a resolver
    Elabore un programa en Java que permita encontrar la sumatoria de los n primeros elementos de la siguiente sucesión numérica: S= ( 3 1 ) 4 − ( 1 5 ) 6 − ( 7 2 ) 9 +( 3 11 ) 14 +( 13 5 ) 18 +( 8 19 ) 27 − .. .

    ResponderEliminar
  30. public void numerosFibonacci(){
    Scanner sn = new Scanner(System.in);
    System.out.println("Ingresa la cantidad de numeros Fibonacci que van a mostrarse");
    int numeros;
    int cantidad = sn.nextInt();
    int numFibo1=1 , numFibo2 = 1;

    System.out.println("Numeros Fibonacci:\n --> Se mostraran " + cantidad + " numeros");
    System.out.println(numFibo1+"\n"+numFibo2);

    for(int i = 1; i<= (cantidad-2); i ++){

    numeros = numFibo1 + numFibo2;
    numFibo1= numFibo2;
    numFibo2= numeros;
    System.out.println(numeros);
    }

    System.out.println("Fin del proceso");

    }

    ResponderEliminar
  31. import java.util.Scanner;

    public class SerieFibonacci {

    public static void main(String[] args) {

    int a, b, aux, num;

    Scanner sc=new Scanner(System.in);

    do{
    System.out.print("Ingrese cantidad de numeros Fibonacci que quiere visualizar: ");
    num=sc.nextInt();
    }while(num<1);

    a=1;
    b=1;
    aux=a+b;

    System.out.print("Serie Fibonacci: " + a + " " + b + " ---> ");
    if (num==1) {
    System.out.print((a+b) + " ");
    }else{
    System.out.print((a+b) + " ");
    for (int i=1; i<num; i++) {
    aux=a+b;
    System.out.print((aux+b) + " ");
    a=b;
    b=aux;
    }
    }
    }
    }

    ResponderEliminar
  32. y utilizando el método de pilas en java netbeans como quedaría la serie fibonacci?

    ResponderEliminar
  33. Hola alguien me ayuda con unos ejercicios en java script estoy empesando a programar

    ResponderEliminar
  34. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  35. Cómo lo resolverias usando los primeros 100 números de la suseción fibonacci? Me ayudaría un montón. Saludos!

    ResponderEliminar
  36. public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int limite = 0, suma = 0, a = 1, b = 1;

    System.out.print("Ingrese el limite de numeros de la serie Fibonacci: ");
    limite = sc.nextInt();

    System.out.print(a + " " + b + " ");
    for (int i = 0; i < limite - 2; i++) {
    suma = a + b;
    b = a;
    a = suma;
    System.out.print(suma + " ");
    }

    }

    ResponderEliminar
  37. y como pudiera ser con un array?? que la persona diga de que tamaño es la serie pero con array?

    ResponderEliminar
  38. Según mi lógica quedo así: :)

    ////////////////////////////////////////////////////////////////////////////////
    import java.util.Scanner;

    public class Fibonacci{
    public static void main(String args[]){

    Scanner sc = new Scanner(System.in);
    int aux=0, aux1, cont = 1;

    System.out.println("Introduce un número para mostrar la serie de Fibonacci: ");
    int n = Integer.parseInt(sc.nextLine());

    System.out.println(" ");

    System.out.println("1");
    for(int i = 0; i < n; i++){
    aux1 = cont;
    cont = cont + aux;

    System.out.println(cont);

    aux = aux1;

    }
    }

    }

    ResponderEliminar
  39. Realizar un algoritmo que presente los 10 primeros números Fibonacci además la suma y
    promedio de ellos

    ResponderEliminar