Fibonacci com 2 variáveis?

6 respostas
H

Então pessoal, tenho 2 dúvidas...
A primeira duvida é a seguinte... depois de ficar horas quebrando a cabeça pra imprimir os 20 primeiros "Fibonaccis", independente do número de variáveis na classe, através de auxílio de outros códigos na net, cheguei no seguinte:

public class Fibonacci {

	 public static void main(String args[]) {

      long numberA=0, numberB=1, result;

      for (int number=0; number<=20; number++) {
		
		if (number==0) {
				result = numberA;
					}

		else if (number==1) {
				result = numberB;
					}

		else {
			
			result = numberA + numberB;
			numberA = numberB;
			numberB = result;
			

         System.out.println("Fibonacci de " + number + "eh: " + result);
      }
   }
}
}

BELEZA! FUNCIONA!!!
agora o que nao consigo entender:
aonde foi usada a variável declarada no for number???
pq pelo o q pude perceber até agora... se o number for 0, result = 0, tranquilo
se number for 1, result = 1, tranquilo tb...
agora no último ELSE...
não existe nenhuma relação com o for... ou seja se number != 0 e de 1, entra o else...

O for foi utilizado apenas caso number=0 || 1, ou ele é utilizado no else também????

como, pois nao vejo ligação... acredito que deve me faltar informações sobre o for e como são feitos os loops.

Por favor me ajudem.

A outra dúvida é... como que eu posso obter o mesmo resultado com apenas 2 variáveis? esse é o desafio da apostila da Caelum... e pra mim tá sendo um belo desafio de início... será que seria algo relacionado a trabalhar direto no incremento do for?

Muito obrigado MESMO!!!

6 Respostas

D

Não tem mto segredo, não cara…

o exercicio soh ficou meio confuso pq vc fez um laço para imprimir todos os F(x), onde x vai de 0 a 20. E como a fórmula de Fibonacci é F(x) = F(x-1) + F(x-2), vc tah usando o laço implicitamente através das variáveis numberA e numberB.

se vc implementar um método separado que resolve a função de fibonacci… garanto q vc vai entender bem melhor. :lol:

A solução para menos variáveis pode ser a recursiva mesmo. No caso eu usei soh uma pra parametro mesmo.

public class opa {

public static void main(String args[]) {
	 for(int i=0; i<20 ; i++){
		 System.out.println("Fibonacci de "+i+" é : "+fibo(i));
	 }
 }
 
 protected static int fibo(int x){
	 if(x==0){
		 return(0);
	 }else if (x==1){
		 return(1);
	 }else{
 		 return(fibo(x-1) + fibo (x-2));
	 }
 }

}

D

Acho que o que ele queria era isso aqui (em Groovy):

def fibonacci(n) { def a = 0 def b = 1 n.times { b = b+a a = b-a println a } }

P

só 130 caracteres

class Fibonacci{ static{ for(int a=0,b=1,i=0;i<20;b+=a,a=b-a,i++){ System.out.print(a+" "); } System.exit(0); } }

E
public class FibonacciDuasVariaveis
{
  public static void main (String[] args)
  {
    int a = 0, fib = 1;

    while (fib <= 100)
    {
      System.out.print (a + " " + fib + " ");
      a += fib;
      fib += a;
    }
    System.out.println ("");
  }
}
B
O código anterior parece fácil mas funciona apenas se for imprimir um número par de elementos...
public class FibonacciDuasVariaveis  
    {  
      public static void main (String[] args)  
      {  
        int a = 0, fib = 1;  
      
        while (fib <= 100)  
        {  
          System.out.print (a + " " + fib + " ");  
          a += fib;  
          fib += a;  
        }  
        System.out.println ("");  
      }  
    }
é que ele só imprime de dois em dois elementos. Por exemplo, na sequência Fibonacci (0,1,1,2,3,5,...) Se colocar while ( fib <= 4 ) (retirando o 5 da lista..) o código não imprime o anterior a ele: 3 É por isso que o código não vai imprimir somente até 3, 8, 21... nem o segundo 1.
L
bitprograma:
O código anterior parece fácil mas funciona apenas se for imprimir um número par de elementos...
public class FibonacciDuasVariaveis  
    {  
      public static void main (String[] args)  
      {  
        int a = 0, fib = 1;  
      
        while (fib <= 100)  
        {  
          System.out.print (a + " " + fib + " ");  
          a += fib;  
          fib += a;  
        }  
        System.out.println ("");  
      }  
    }
é que ele só imprime de dois em dois elementos. Por exemplo, na sequência Fibonacci (0,1,1,2,3,5,...) Se colocar while ( fib <= 4 ) (retirando o 5 da lista..) o código não imprime o anterior a ele: 3 É por isso que o código não vai imprimir somente até 3, 8, 21... nem o segundo 1.

Huahuahau
Eu sempre quis jogar essa carta!

Brincadeirinha... olha a função esse link:
http://www.guj.com.br/java/136868-project-euler

Criado 29 de abril de 2006
Ultima resposta 15 de set. de 2014
Respostas 6
Participantes 7