Dúvida exercicio Fibonacci da apostila Caelum

21 respostas
M

Oi pessoal, estou com a seguinte dúvida neste exercício:

6-(opcional) Imprima os primeiros números da série de Fibonacci até passar de 100. A série de Fibonacci é a
seguinte: 0, 1, 1, 2, 3, 5, 8, 13, 21, etc… Para calculá-la, o primeiro e segundo elementos valem 1, daí por
diante, o n-ésimo elemento vale o (n-1)-ésimo elemento somado ao (n-2)-ésimo elemento (ex: 8 = 5 + 3).

Eu sei que a sequencia Fibonacci é a soma dos dois algarismos anteriores, porém eu nao entendi como eu coloco isso no código. Alguem poderia me explicar?

Muito obrigado a todos do fórum, vocês estão me ajudando muito, que sempre tiveram paciência em sanar minhas dúvidas.

21 Respostas

Vingdel

Olámazoni,

Eu faria assim, teste aí para ver se é isso mesmo.

public class fibo{ static int fib(int n){ if(n<=2) return 1; else return fib(n-1) + fib(n-2); } public static void main(String[] arg){ int n = 0; for(int i = 1; n < 100; i++){ n = fib(i); System.out.println(n); } } }

Abraço e bons estudos!

Bocchi

Só um ajuste para comecar do 0.

~public class Fibo {

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

     public static void main(String[] arg){
         int n=0;
         for(int i = 0; n < 100; i++){
             n = fib(i);
             System.out.println(n);
         }  
     }
}
M

Pessoal não quero ser chato, mas seria possível fazer um código mais simples?

Seria possível escrever o código apenas neste intervalo com 2 variáveis?

public static void main(String[] arg){  
          int n=0;  
          for(int i = 0; n < 100; i++){  
              n = fib(i);  
              System.out.println(n);

Eu ainda nao entendi como vou colocar a lógica desse Fibonacci :cry:

O

Brother, sua dúvida já foi respondida no fórum. Pesquise por “fibonacci”.

Nos códigos postados aqui, o else é redundante.

Vingdel

Verdade, esqueci do detalhe que a Caellum pediu para começar do 0 (zero), valeu pela correção, Bocchi.

Realmente, ozix, o else não precisa estar alí.

mazoni, o que você quer está sendo feito, só tem 2 variaveis no meu código.

Esse é um método recursivo, estude recursividade para entender o código.

Abraço e bons estudos!

Gustavo.Haluch

Também estou resolvendo esse exercício. E fiz da seguinte maneira:

System.out.println("Imprima os primeiros números da série de Fibonacci até passar de 100:"); for (int i = 0, i1 = 0, i2 = 1; i1 + i2 <= 100 ; i++) { System.out.println("Série de Fibonacci: " + i1); i2 += i1; System.out.println("Série de Fibonacci: " + i2); i1 += i2; }

Vingdel

Gustavo.Haluch:
Também estou resolvendo esse exercício. E fiz da seguinte maneira:

System.out.println("Imprima os primeiros números da série de Fibonacci até passar de 100:"); for (int i = 0, i1 = 0, i2 = 1; i1 + i2 <= 100 ; i++) { System.out.println("Série de Fibonacci: " + i1); i2 += i1; System.out.println("Série de Fibonacci: " + i2); i1 += i2; }

Verdade Gustavo, seu código está imprimindo Fibonacci, eu nunca tinha pensado dessa forma, mas o amigo mazoni tava querendo um método com duas variáveis, o seu método usa três variaveis. Experimente fazer com while.

Notei que a apostila da Caelum dias que a Sequência Fibonacci é 0, 1, 1, 2, 3, 5 …, mas logo em seguida diz que os dois primeiro elemntos valem 1. Afinal, ela quer que comece com 1 ou com zero. A Sequência Fibonacci inicia com 0 ou com 1? Já pesquisei sobre isso e não achei nada concreto.

Abraço!

E

A referência é o site Mathworld:

http://mathworld.wolfram.com/FibonacciNumber.html

Ele diz que os dois primeiros termos são 1 e 1 mesmo.

De qualquer maneira, se você disser que são 0 e 1 não vai fazer “muita” diferença: nessa mesma referência ele diz que F(0) = 0.

Vingdel

Opa entanglement,

Muito interessante. Gostei mesmo.

Obrigado pela fonte, abraço!

Gustavo.Haluch

É verdade, Vingdel.

Refiz o código com o While, e além de utilizar apenas duas variáveis, ficou até mais limpo de se ver o código. :smiley:

Valeu!
Abraço.

S

PESSOAL, ESTA LINHA "n = fib(i);" É ALGUMA FUNÇÃO PRONTA JÁ EM JAVA?

OBRIGADO!!!

mazoni:
Pessoal não quero ser chato, mas seria possível fazer um código mais simples?

Seria possível escrever o código apenas neste intervalo com 2 variáveis?

public static void main(String[] arg){  
          int n=0;  
          for(int i = 0; n < 100; i++){  
              n = fib(i);  
              System.out.println(n);

Eu ainda nao entendi como vou colocar a lógica desse Fibonacci :cry:

Vingdel

Não, amigo stevan.

É um método criado pelo programador...

Veja os códigos postados anteriormente que você vai entender. Pegue o tópico desde o início para ficar por dentro do assunto.

Abraço!

stevan:
PESSOAL, ESTA LINHA "n = fib(i);" É ALGUMA FUNÇÃO PRONTA JÁ EM JAVA?

OBRIGADO!!!

mazoni:
Pessoal não quero ser chato, mas seria possível fazer um código mais simples?

Seria possível escrever o código apenas neste intervalo com 2 variáveis?

public static void main(String[] arg){  
          int n=0;  
          for(int i = 0; n < 100; i++){  
              n = fib(i);  
              System.out.println(n);

Eu ainda nao entendi como vou colocar a lógica desse Fibonacci :cry:

maisongalvao144
public class Desafio1 {

    public static void main(String[] args) {
        int a = 1,b=1;
        while ( b <= 100) {
           a = a + b;
            System.out.print(" " + b);
            b=a-b;
            
        }
    }
}
Riposati

FIBONATÃO AI GENTE

public class Fibonatao {

    public static void main(String[] args) {

     //Fibonatão muleque ///

        long i=1,j=0,aux,z,l=0;
        
        for(z=1;z<100;z++){
            if(j==0){
                System.out.println(j);
            }
            aux = i+j;
            i = j;
            j = aux;
            System.out.println(j);
            
            
        }
        
    }
}
Riposati

Fibonacci com duas variáveis é o fibonacci recursivo

maisongalvao144

O método que postei anteriormente utiliza somente duas variáveis e não utiliza recursividade.

Vynko

Não testei, mas duvido muito que de errado, a propósito, diria que o código abaixo só usa 2 variáveis, pois a do for ela é excluída após o loop, mas se ainda assim você quer com menos que essas variáveis, você deva tentar com while(true) e usar o if para verificar se a série está maior que determinado número, etc. Boa sorte.

class Fibonacci {
   public static void main(String[] args) {
      int i=1;
      int ii=1;
      for(int a=0; a<30; a++) {
         System.out.print(i+", ");
         i += ii;
         System.out.print(ii+", ");
         ii += i;
      }
   }
}
JavaDreams

Se for usar Java programando hardware de dispositivos, use recursividade
pois economiza memória. Mas tem que saber fazer.

Se for só para exercício, melhor começar fazendo de um jeito que dê para você
entender e depois vai evoluindo sua lógica e etc.

Fica minha dica.

filipeaugustolins

Olá a todos, achei esse tópico enquanto também estudava a questão.

Encontrei essa solução que pra mim foi a mais simples e de fácil entendimento:

public class Exercicio6 {
	
	public static void main(String[] args) {
		int a = 0;
		int b = 1;
		System.out.println(a);
		while (b < 100){
			System.out.println(b);
			b = a + b; //próximo número fibonacci
			a = b - a; //atualiza número anterior
		}
		        
	}

}

Espero ter ajudado!

M

Fiz umas adaptações para ficar menor, e ter somente 2 variaveis

public static void main(String[] args) {
		int ant = 1;
		for(int cont = 0; cont < 100;) {
			System.out.print(cont + " ");
			cont += ant;
			System.out.print(ant + " ");
			ant += cont;
		}
	}
E
class Fibonacci{
	public static void main(String[] Args){
		int i = 1;
		int fibonacci = 0;
		
		while(fibonacci < 1000){
			System.out.println(fibonacci);
			if (fibonacci == i)
			    System.out.println(i);
			
			fibonacci = i + fibonacci;			
			if (fibonacci >= 2)
				i = fibonacci - i;
		}
	}

}
Criado 27 de agosto de 2010
Ultima resposta 11 de ago. de 2014
Respostas 21
Participantes 14