2009-11-06 3 views
1

У меня есть программа, которая должна считывать значения из пользователя в вектор. Затем моя функция должна поддерживать текущую сумму и начинать с элемента 1 и сравнивать элемент 2 с суммой (этот момент это всего лишь элемент 1). Перейдите к следующему элементу, добавьте элемент 2 в сумму и посмотрите, больше ли элемент 3, чем сумма элементов 1 и 2. Я должен печатать только те элементы, которые больше суммы. У меня возникли проблемы с его получением каких-либо значений. Может кто-нибудь, пожалуйста, дайте мне знать, что я могу делать неправильно? БлагодаряОшибка рекурсивной функции

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

Пожалуйста, отформатируйте источник в своем вопросе, используя пробелы, а не вкладки, и включите весь источник в форматирование. –

+0

Я думаю, что это не место, где можно задать домашнее задание! –

+1

Вы должны использовать рекурсию? –

ответ

1

Во-первых, ваша функция не может осмысленно обработать случай, когда myVector[index] == runningSum.

Во-вторых, начальное значение runningSum берется из unsortedData[i], который не имеет никакого смысла, так как i является -1 в то время. Вероятно, вы имели в виду unsortedData[0].

2

Есть несколько ошибок в коде:

int runningSum = unsortedData[i]; 

Вы, вероятно, означало index, не i. Оба ошибочны: первый индекс в массиве - 0, а не 1 (который является значением index).

Кроме того, ваша рекурсивная функция содержит хотя бы одну ошибку: вы не считаете, что текущий элемент равен сумма.

Другое дело: вы передаете вектор своей функции по значению - не очень хорошая идея: для каждого вызова функции весь вектор скопирован, что может занять значительное время для средних векторов. В «реальном» коде большие типы данных должны всегда передаваться ссылкой (const). Просто немного изменить сигнатуру функции:

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

Таким образом, вы передаете неизменяемую ссылку вашего вектора функции вместо того, чтобы копировать его. Обратите внимание, что это делает невозможным изменение данных вектора внутри функции.

0

В начале основного использования вы используете данные, а затем используете unsortedData. Я не уверен, почему компилятор не жаловался на несортированные данные, которые не определены.

Смежные вопросы