2010-11-14 29 views
3

Je n'arrive pas à comprendre pourquoi le code suivant ne produit pas la sortie attendue. A la place, résultat = 272 ce qui ne semble pas correct.Trouver la somme de tous les termes pairs dans la séquence Fibonacci

/* 
*Each 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 four million. 
*/ 

public class Fibonacci 
{ 
    public static void main (String[] args) 
    { 
     int result = 0; 
     for(int i=2;i<=33;i++) 
     { 
      System.out.println("i:" + fib(i)); 
      if(i % 2 == 0) //if i is even 
      { 
       result += i; 
       System.out.println("result:" + result); 
      } 
     } 
    } 
    public static long fib(int n) 
    { 
     if (n <= 1) 
      return n; 
     else 
      return fib(n-1) + fib(n-2); 
    } 
}  

Répondre

5

La ligne result += i; n'ajoute pas Fibonacci numéro à result.

Vous devriez être en mesure de comprendre comment faire pour ajouter un numéro Fibonacci à result.

Indice: Pensez à créer une variable qui stocke le numéro avec lequel vous essayez de travailler.

+2

En outre, la ligne 'if (i% 2 == 0)' ne teste pas si un nombre * Fibonacci * est pair. – rampion

+0

@rampion: Oui; cela aussi. (Je pensais qu'il voulait vraiment même _inidicies_) – SLaks

+0

je l'ai eu. Merci! – kachilous

1

Tout d'abord, vous avez une mauvaise chose pour le Fib. La définition de Fib peut être trouvée ici: http://en.wikipedia.org/wiki/Fibonacci_number.

Deuxièmement (i% 2) est vrai pour tous les autres nombres (2, 4, 6 et ainsi de suite), ce qui signifie que c'est vrai pour fib (2), fib (4), et ainsi de suite.

Enfin, le résultat + = i ajoute l'index. Ce que vous ne voulez pas ajouter est le résultat de la fib (i). Donc d'abord vous devez calculer fib (i), stocker cela dans une variable, et vérifier si THAT est un nombre pair ou impair, et si c'est le cas, alors ajouter la variable au résultat.

[Modifier]
Un dernier point: faire fib à récursivité lorsque vous wan't d'additionner tous les chiffres peuvent être vraiment mauvais. Si vous travaillez avec des nombres élevés, vous pourriez même finir avec StackOverflowException, donc c'est toujours une bonne idée d'essayer de trouver un moyen de ne pas avoir à calculer les mêmes nombres encore et encore. Dans cet exemple, vous voulez additionner les nombres, donc au lieu d'essayer d'abord fib (0), puis fib (1) et ainsi de suite, vous devriez juste aller avec la liste, vérifier tous les nombres sur le chemin et ensuite l'ajouter au résultat s'il correspond à vos critères.

+1

S'il vous plaît ne faites pas les devoirs des gens. – SLaks

+0

est en fait un exercice sur le projet euler, et j'ai été en mesure de le comprendre. merci bien – kachilous

+0

@SLaks Bon point. Je ai essayé de modifier, mais j'ai peur qu'il est trop tard :-P – Alxandr

0

Eh bien, voici un bon point de départ, mais c'est C, pas Java. Pourtant, il pourrait aider: link text