Dúvida exercicio Fibonacci da apostila Caelum

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.

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!

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

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?

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

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

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

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

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!

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

1 curtida

[quote=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; }[/quote]

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!

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.

Opa entanglement,

Muito interessante. Gostei mesmo.

Obrigado pela fonte, abraço!

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

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

OBRIGADO!!!

[quote=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?

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

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

[/quote]

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!

[quote=stevan]PESSOAL, ESTA LINHA “n = fib(i);” É ALGUMA FUNÇÃO PRONTA JÁ EM JAVA?

OBRIGADO!!!

[quote=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?

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

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

[/quote][/quote]

[code]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;
        
    }
}

}[/code]

FIBONATÃO AI GENTE

[code]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);
        
        
    }
    
}

}
[/code]

Fibonacci com duas variáveis é o fibonacci recursivo

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

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

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.

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:

[code]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
	}
	        
}

}[/code]

Espero ter ajudado!

1 curtida