2009-12-24 3 views
0

J'ai cette classe:classe Fibonacci retourne toujours 0

public class Fibonacci 
{ 
    public static int Calculate(int x) 
    { 
     if (x <= 0) 
     { 
      return 0; 
     } 
     else 
     { 
      return Calculate(x - 1) + Calculate(x - 2); 
     } 
    } 
} 

par un tutoriel que je fais si un 6 entrées on devrait obtenir 8 comme résultat attendu, mais quand je le lance, il retourne toujours 0 C'est récursif, donc ça a du sens pour moi, mais comment est-ce qu'ils obtiennent 8 comme résultat attendu?

+9

Vous devriez vous débrouiller seul, vous en apprendrez plus. Astuce: pensez à ce que fait Calculer (0) et Calculer (1). Et si vous ne l'obtenez pas, utilisez un débogueur. –

+0

La méthode Calculate ne peut pas retourner null - le type de retour est un entier, qui ne peut pas être nul. Je remarque que dans le texte vous dites qu'il renvoie zéro - mais dans le titre vous dites null. Ce ne sont pas la même chose - je vous suggère de mettre à jour le titre pour dire zéro. –

+0

En tant que sidenote: la récursivité n'est pas la meilleure façon de calculer les nombres de fibonacci. Par exemple, lorsque vous utilisez cette méthode pour calculer f (n), alors f (n-2) est calculé deux fois. F (n-4) est calculé 5 fois! Essayez-le sur le papier avec f (6) ... –

Répondre

2

La séquence de fibonacci a 2 points d'arrêt, et ils sont tous les deux 1 (1,1,2,3,5, ...). Cela fonctionne:

using System; 
using System.Collections.Generic; 

public class Fibonacci 
{ 
    public static int Calculate(int x) 
    { 
     if (x <= 1) 
      return 1; 
     else 
      return Calculate(x - 1) + Calculate(x - 2); 
    } 

    public static void Main() 
    { 
    Console.WriteLine(Calculate(4)); 
    } 
} 
+0

cela ne produit toujours pas 8 quand l'entrée est 6 ... –

+0

C'est basé sur 0, donc si vous lui donnez 5, il vous en rendra 8. – Blindy

4

La condition de sortie est incorrecte. Lisez votre code et réfléchissez-y pour les entrées 1 et 2.

1

Soit le tutoriel est faux, soit vous avez incorrectement copié le code. Vous avez raison de dire que ce que vous avez ci-dessus retournera toujours 0. Vérifiez vos cas de base.

0

Abductio ad absurdum - Calculer (x) ne retourne jamais en fait un nombre non nul. 8 est le sixième numéro Fib, mais vous ne créez jamais une valeur non nulle à partir de cette fonction. Comme le souligne @Blindy, vous avez besoin d'un scénario de base plus complet et inclusif.

6

Qu'est-ce que 0 + 0 + 0 + 0 + 0 + 0 + ... + 0?

Voici votre réponse.