Fibonacci + soma

7 respostas
G

Pessoal é o segundo exercicio de um site que estou estudando… Ele agora pede para fazer uma serei de fibonacci e que some os numeros e que não passe de 1 milhão. O execicio é esse:

ach new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

Find the sum of all the even-valued terms in the sequence which do not exceed one million.

Então eu fiz este codigo:

public class Fibonacci { 
    
   public static long fib(int n){ 
    
     if(n==0) return 0; 
      else 
       if(n==1) return 1; 
        else 
         return fib(n-1)+fib(n-2); 
    
    
   } 
    
    
    
   public static void main(String args[]){ 
       
      Fibonacci f = new Fibonacci(); 
      long n = 0, soma =0; 
      for(int i=2; i<=29; i++){ 
         n = f.fib(i); 
         soma += n; 

         System.out.println(i + ":" + f.fib(i) +"     "+ soma); 
      } 
    
    
   } 
    
}

ela da um numero muito proximo de um milhao mas não sei se esta correto? existe por acaso uma deficiencia em java com numeros grandes?
porque eu não consigo achar o numero certo…
grato.

7 Respostas

davidbuzatto

Amigo,

Falou um detalhe, ele quer a soma de valores pares (even-valued terms).

Como a série de finonacci gera números muito grandes quando a mesma vai evoluido, usa um long ao invés de int. Se mesmo assim vc precisa que o número seja enorme vc pode usar um BigInteger.

Até mais!

davidbuzatto

Vc ja está usando long, agora que vi :smiley:

Vou postar o código alterado… Pera ai…

davidbuzatto

Veja se funciona.

public static void main( String[] args ){ 
    
    int i = 0;
    long n = 0;
    long soma = 0; 

    while ( true ) {

        // fib é estático, não precisa instanciar Fibonacci
        n = fib( i );

        // se par e menor ou igual a 1 milhão, soma
        if ( n % 2 == 0 && n <= 1000000 )
            soma += n;
        
        // se maior que 1 milhão, sai do while
        if ( n > 1000000 )
            break;

        i++;

    }

    System.out.println( "A soma é: " + soma ); 
     
}

Até mais!

peczenyj

Bah, na boa, não use a forma recursiva para calcular fibonacci – prefica a forma iterativa e guarde em um array (isso economiza MUITOS recursos).

G

Pessoal não esta dando a resposta correta.
Eu to passando a serie de fibonacci… prolongada.
veja:
1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17710,28656,46366,75022

e a possivel
soma

2
8
34
144
610
2584
10946
17710
28656
46366
75022

total
60694

isso foi o mais perto que chegeui.
grato

davidbuzatto

Mas que erro que dá? Como que esse monte de coisa somada pode dar 60694? Só o último valor já dá 75022.

davidbuzatto

Olha a saída aqui (os números com * são os pares)

0 * 1 1 2 * 3 5 8 * 13 21 34 * 55 89 144 * 233 377 610 * 987 1597 2584 * 4181 6765 10946 * 17711 28657 46368 * 75025 121393 196418 * 317811 514229 832040 * 1346269 A soma é: 1089154 Press any key to continue...

Criado 30 de julho de 2007
Ultima resposta 31 de jul. de 2007
Respostas 7
Participantes 3