2012-02-26 4 views
1

Possible en double:
Make an array to store the calculated numbers in memoryFix tableaux récursifs

Je dois modifier un code pour faire de nouvelles choses.

Ce sont les nouvelles exigences:

programme -Le devra utiliser un tableau dans lequel stocker les nombres de Fibonacci calculés dans la mémoire. (Ce qui peut être une variable globe)

-Le tableau de nombres est également considéré comme un tableau partiellement rempli et par conséquent je devrai déclarer une variable pour garder une trace du nombre d'éléments qui ont été stockés dans le tableau .

-Le tableau de nombres doit être déclaré avoir 46 positions.

-Le nombre 46 doit être déclaré comme une constante globale nommée MAXFIB, et par conséquent le nombre 46 ne doit pas apparaître dans mon programme plus d'une fois. -Au début de votre programme, le tableau de nombres doit être initialisé avec la "connaissance de départ" (les cas de base) - les deux premiers nombres Fibonacci sont 1 et 1. Stockez-les dans les deux premières positions de tableau. -Ajouter un ensemble supplémentaire de cas de base de sorte que si la valeur du paramètre "n" est trop basse ou trop élevée, la fonction s'arrête et renvoie -1, indiquant une condition d'erreur. -Ajouter un cas de base supplémentaire de sorte que si le numéro de Fibonacci que nous recherchons est déjà stocké dans le tableau, alors j'ai simplement besoin de le récupérer du tableau et de le renvoyer. -Pour le cas récursif, il faudra encore appeler la fonction deux fois de manière récursive comme auparavant, mais après avoir calculé le nombre, je devrai le stocker dans le tableau avant de le renvoyer.

Ceci est mon code à ce jour:

#include <iostream> 
using namespace std; 

// Returns the nth number in the fibonacci sequence 
int fib(int n, int* memory); 

const int MAXFIB = 46; 

int main() 
{ 
    int memory[MAXFIB]; 

    memory[0] = 1; 
    memory[1] = 1; 

    cout << fib(46) << endl; 

    system("pause"); 
    return 0; 
} 

int fib(int n, int* memory) 
{ 
    // Base cases 
    if (n < 1 || n > MAXFIB) return -1; 

    if (n == memory) return memory; 

    // Recursive cases 
    memory[n] = fib(n-1) + fib(n-2); 
    return; 

} 

Alors, ma question est, ce que je fais bien et faire le mal? De quoi ai-je besoin pour corriger et ou finir?

Merci

+0

Vous avez des exigences inhabituelles. Devoirs? – DSM

+0

Avez-vous essayé de compiler votre code? Que vous disent les messages d'erreur à propos de votre code? – Blastfurnace

+0

Essayez au moins de compiler votre code avant de le demander. – SigTerm

Répondre

1

Pas super compétent de la langue, mais dans votre appel de méthode pour vous fib mettez seulement 46. Dans votre définition pour FIB() vous avez deux paramètres spécifiés. Peut-être que dans l'appel de la méthode, ajoutez le paramètre pour remplir la mémoire int *.

Encore une fois .. pas compétent dans la langue. Juste une possibilité.

+0

Alors que le tag C++ est certainement celui où vous devez être compétent dans la langue pour répondre aux questions, cette réponse est correcte pour autant qu'elle répond –

+0

Que voulez-vous dire "pour remplir int * mémoire"? – Gvegas222

+0

int fib (int n, int * mémoire) { Voici comment vous avez défini la fonction ..quand vous appelez cette fonction à partir de votre main() vous l'appelez seulement comme fib (46) vous avez besoin de fib (46, someInt) – Scape

1

pourquoi vous utilisez 46 Cout < < FIB (46) < < endl;

vous pouvez utiliser Cout < < fib (MAXFIB) < < endl; facile à changer à l'avenir