2009-11-06 5 views
1

J'ai un programme censé lire des valeurs de l'utilisateur dans un vecteur. Ma fonction est alors supposée conserver une somme courante et partir de l'élément 1 et comparer l'élément 2 à la somme (ce point c'est juste l'élément 1). Passer à l'élément suivant, ajouter l'élément 2 à la somme et voir si l'élément 3 est supérieur à la somme des éléments 1 et 2. Je suis supposé n'imprimer que les éléments qui sont supérieurs à la somme. J'ai du mal à l'imprimer pour imprimer des valeurs. Quelqu'un pourrait-il me faire savoir ce que je pourrais faire de mal? MerciErreur de fonction récursive

int main() 
{ 
    vector <int> theData; 
    int i; 

    cout<< "Enter in the list of integers ending with a -1" << endl; 

    do 
    { 
     cin >> i; 
     if (i==-1) 
     { 
      break; 
     } 
     theData.push_back(i); 


    }while(i!=-1); 

    int index = 1; 
    int runningSum = unsortedData[i]; 
    largeValue(unsortedData, index, runningSum); 

    system("PAUSE"); 
    return 0; 
} 

void largeValue(vector<int> myVector, int index, int runningSum) 
{ 
    int size = myVector.size(); 

    if (index == size) 
    { 
     return; 
    } 
    if (myVector[index] > runningSum) 
    { 
     cout << myVector[index] << " "; 
     runningSum += myVector[index]; 
     index = index +1; 
     largeValue(myVector, index, runningSum); 
    } 
    else if (myVector[index] < runningSum) 
    { 
     runningSum += myVector[index]; 
     index = index + 1; 
     largeValue(myVector, index, runningSum); 
    } 
} 
+0

Veuillez mettre en forme la source dans votre question en utilisant des espaces, pas des onglets, et incluez toutes les sources dans la mise en forme. –

+0

Je pense que ce n'est pas l'endroit pour demander des devoirs! –

+1

Êtes-vous censé utiliser la récursivité? –

Répondre

1

Tout d'abord, votre fonction ne parvient pas à traiter de façon significative le cas lorsque myVector[index] == runningSum.

En second lieu, la valeur initiale de runningSum est tirée de unsortedData[i] qui ne fait pas de sens, puisque i est -1 à ce moment-là. Vous avez probablement voulu dire unsortedData[0].

2

Il y a plusieurs erreurs dans votre code:

int runningSum = unsortedData[i]; 

Vous avez probablement voulu dire index, pas i. Les deux sont faux, cependant: le premier index dans le tableau est 0, pas 1 (qui est la valeur de index).

En outre, votre fonction récursive contient au moins une erreur: vous ne considérez pas que l'élément actuel est égal à la somme. Autre chose: vous passez le vecteur à votre fonction par valeur - ce n'est pas une bonne idée: pour chaque appel de la fonction, le vecteur entier est copié, ce qui peut prendre beaucoup de temps pour les vecteurs de taille moyenne. Dans le code "réel", les grands types de données doivent toujours être passés par la référence (const). Il suffit de changer la signature de la fonction légèrement:

void largeValue(vector<int> const& myVector, int index, int runningSum) 

De cette façon, vous passez une référence non modifiable de votre vecteur à la fonction au lieu de le copier. Notez que cela rend impossible la modification des données du vecteur dans la fonction.

0

Au début, vous utilisez les données et plus tard vous utilisez unsortedData. Je ne sais pas pourquoi le compilateur ne s'est pas plaint que unsortedData n'était pas défini.