C++ 递归函数误差

C++ 递归函数误差,c++,recursion,C++,Recursion,我有一个程序,应该把用户的值读入向量。然后,我的函数应该保持一个运行的和,并从元素1开始,将元素2与和进行比较(这一点只是元素1)。移动到下一个元素,将元素2添加到总和,然后查看元素3是否大于元素1和2的总和。我应该只打印大于总和的元素。我很难让它打印出任何值。有人能告诉我我可能做错了什么吗?谢谢 int main() { vector <int> theData; int i; cout<< "Enter in the list of inte

我有一个程序,应该把用户的值读入向量。然后,我的函数应该保持一个运行的和,并从元素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);
    }
}
intmain()
{
矢量数据;
int i;
我不能;
如果(i==-1)
{
打破
}
数据。推回(i);
}而(i!=-1);
int指数=1;
int runningSum=unsortedData[i];
大值(未排序数据、索引、运行和);
系统(“暂停”);
返回0;
}
void largeValue(vector myVector、int index、int runningSum)
{
int size=myVector.size();
如果(索引==大小)
{
返回;
}
if(myVector[index]>runningSum)
{

cout首先,当
myVector[index]==runningSum
时,函数无法有意义地处理该情况


其次,
runningSum
的初始值取自
unsortedData[i]
,这没有任何意义,因为当时
i
-1
。您可能的意思是
unsortedData[0]
您的代码中有几个错误:

int runningSum = unsortedData[i];
您可能指的是
索引
,而不是
i
。但这两种方法都是错误的:数组中的第一个索引是
0
,而不是
1
(这是
索引
的值)

此外,您的递归函数包含至少一个错误:您不认为当前元素等于和。 另一件事:通过值将向量传递给函数——这不是一个好主意:对于函数的每次调用,都会复制整个向量,这对于中等大小的向量可能需要相当长的时间。在“实”代码中,大数据类型应始终通过(const)引用传递。只需稍微更改函数签名:

void largeValue(vector<int> const& myVector, int index, int runningSum)
void largeValue(向量常量&myVector,int索引,int运行和)

通过这种方式,您可以将向量的不可修改引用传递给函数,而不是复制它。请注意,这使得无法修改函数中向量的数据。

主要是早期使用数据,后来使用未排序的数据。我不确定编译器为什么没有抱怨未定义未排序的数据。

请在问题中使用空格而不是制表符来设置源代码的格式,并在格式中包含所有源代码。我认为这不是要求家庭作业的地方!你应该使用递归吗?@Nathan:这是一个寻求帮助的地方!这不是一个措辞最好的问题,但绝对不是一个“请发送家庭作业”的问题。