A minha série de Fibonacci está certa?

11 respostas
GALACTUS

Olá galera, estou aqui mais uma vez enchendo os biguá de vocês, então, eu tive que fazer um exercício só com o laço FOR sobre a série de Fibonacci(1,1,2,3,5,8,13,21,34,…) que conta os valores até o Décimo quinto termo, e fiz o programa assim:

/* Programa que apresenta a série de Fibonacci 1,1,2,3,5,8,13,21,34... até o 
 * décimo quinto termo */

package seriefibonacci;

import javax.swing.JOptionPane;

public class SerieFibonacci 
{
    public static void main(String[] args) 
    {
        int i;
        int total=0;
        int n1=1;
        int n2=1;
        int n3=0;
        
        for(i=1;i<=15;i++)
        {
            n3=n1+n2;
            total=n3;
            n1=n2;
            n2=n3;
        }
        JOptionPane.showMessageDialog(null,""+total,"FIBONACCI",
                JOptionPane.PLAIN_MESSAGE);
    }
}

O Programa está funcionando muito bem desse geito, eu até imprimi uma copia pra colar na parede hahaha, mas eu queria saber se dá pra simplificar mais o programa apenas com o laço For, sem if sem vetor sem nada, apenas com o laço FOR e variáveis???

11 Respostas

claudneto

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

recursividade é o meio mais simples de fazer isso…

Com laço for também dá, sem vetor!..mas eu to na aula…então n da pra eu fazer agora…

Depois eu faço…

GALACTUS

Véiu, desse geito que você fez ficaria super hiper mega ótimo, muito legal, porém eu tenho que usar o For ou o WHILE, o WHILE eu não sei usar direito, só sei usar o FOR, é que no exercício que o professor de é pra fazer a série de fibonacci com estrutura de repetição.
Veja, eu tentei melhorar o programa, eu acho que o que eu fiz é gambiarra, de uma olhada, está funcionando perfeitamente, veja:

/* Programa que apresenta a série de Fibonacci 1,1,2,3,5,8,13,21,34... até o 
 * décimo quinto termo */

package seriefibonacci;

import javax.swing.JOptionPane;

public class SerieFibonacci 
{
    public static void main(String[] args) 
    {
        int i;
        String total="1,";
        int n1=0;
        int n2=1;
        int n3=0;
        
        for(i=1;i<=14;i++)
        {
            n3=n1+n2;
            total+=n3+",";
            n1=n2;
            n2=n3;
        }
        JOptionPane.showMessageDialog(null,""+total,"FIBONACCI ATÉ 15º ELEMENTO",
                JOptionPane.PLAIN_MESSAGE);
    }
}

Eu queria saber se dá pra melhorar apenas com o FOR ou o WHILE, sem if, sem vetores etc…???

71C4700

Teria como resolver da seguinte maneira ?

int primeiro = 0;
int segundo = 1;

for(int i=0;i<15;i++){
	segundo = primeiro +segundo;
	primeiro = segundo - primeiro;
        // Aqui fazeria os calculos necessarios.
}

Da uma olhada e manda a resposta !

claudneto

Pra resolver Fibonacci…vá na busca do fórum…

É o que mais perguntam…

=)

Tem até com String eu acho…Deve ter com DB…auihAIUAHuiaHiuaHuia

Obs.: Vc gosta de usar Swing né?? Todos os seus códigos tem swing…

GALACTUS

Então véiu, acho que desse geito que você fez, ele vai dar um, sempre vai ficar dando um eu acho, vamos ver:

segundo=primeiro+segundo;
primeiro=segundo-primeiro;

segundo=0+1; segundo=1
primeiro=1-0; primeiro=1

segundo=1+1; segundo=2
primeiro=2-1; primeiro=1

segundo=1+2; segundo=3
primeiro=3-1; primeiro=2

segundo=2+3; segundo=5
primeiro=5-2; primeiro=3

segundo=3+5; segundo=8
primeiro=8-3; primeiro=5

a sua lógica também funciona porém é igual a minha, eu queria que o total recebe-se no primeiro loop o número 1, depois no segundo loop o total também recebe-se 1, aí depois no terceiro loop recebe 2, no terceiro loop recebe-se 3, no 4 loop recebe-se 5 e daí por diante entendeu??? Sabendo que a variável total é uma String que vai concatenando os valores e no final ela mostra os valores assim:
1,1,2,3,4,5,8,13,21,34… até o décimo quinto termo que se eu não me engano é 610, ou seja o resultado final vai ser

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610

manjou??

e do geito que nos estamos fazendo o resultado final vai dar 1,2,3,5,8,13,21,34,55,89,144,233,377,610, ou seja está faltando mais um 1 no começo do resultado, por isso eu fiz aquela gambiarra no começo do programa com a string já recebendo 1 depois ela só vai concatenando os outros resultados, entendeu a explicação e a minha duvida??

GALACTUS

Então Sr. Claudneto se for o swing que eu estou pensando pode apostar que eu não gosto de swing hahahahaha, (se é loko, até parece que eu ia gostar de ver minha mulher sentar no nabo de outro) hahahaha, mas se for o swing do Java pode crê que sim, também é o unico pacote que eu sei usar hahahahahaha, estou começando agora, por isso eu achei esse pacote interressante, eu gosto de usar o JOptionPane.

claudneto

Use o Scanner...

Também é interessante...

import java.util.Scanner;

class UsaScanner {
    public static void main (String[] args) {
        Scanner sc = new Scanner();
        System.out.println("String: ");
        String s = sc.nextLine();
        System.out.println("int: ");
        int i = sc.nextInt();
        System.out.println("double: ");
        double d = sc.nextDouble();
    }
}

Eu acho mais fácil de usar...

Ele só não é tão bonito quanto o JOptionPane...mas é legalzinho também!

GALACTUS

A SIM, no começo eu usava o SCANNER e realmente ele é interessante mas já acustumei com com o bom e velho JOptionPane, é que eu sou voltado mais a interface sabe.
Mas o scanner é legal também.

71C4700

GALACTUS:
Então véiu, acho que desse geito que você fez, ele vai dar um, sempre vai ficar dando um eu acho, vamos ver:

segundo=primeiro+segundo;
primeiro=segundo-primeiro;

segundo=0+1; segundo=1
primeiro=1-0; primeiro=1

segundo=1+1; segundo=2
primeiro=2-1; primeiro=1

segundo=1+2; segundo=3
primeiro=3-1; primeiro=2

segundo=2+3; segundo=5
primeiro=5-2; primeiro=3

segundo=3+5; segundo=8
primeiro=8-3; primeiro=5


Observe que a variavel segundo é a variavel que representa a sequencia fibonacci e o 15 e a quantidade de interação que voce irá realizar!
Sim, so pra constatar, funciona!
Testei antes de enviar pra voce!

fernandowx
//Calcula a sequência Fibonacci.

public static void main(String args[]){
        int total=0;
        int y=1;
        int z=1;
        for(int i=1;i<15;i++){
           z=total;
           total=total+y;
           y=z;
        System.out.println("Fibonacci de " +(i)+ " = "+total);
        }
    }
}
B

Tenta o código abaixo, não sei se está 100% pq não tenho como testar daqui.

public static void main(String[] args) {     
        
int[] x = new int[15];
x[0] = 0;
x[1] = 1;
for(int i=2;i<15;i++){     

x[i] = x[i-1] + x[i-2];
System.out.println(x[i]);     
}     
     
}
Criado 22 de setembro de 2008
Ultima resposta 9 de nov. de 2010
Respostas 11
Participantes 5