递归函数错误

时间:2009-11-06 21:48:21

标签: c++ recursion

我有一个程序,应该将用户的值读入矢量。然后我的函数应该保持运行总和并从元素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);
    }
}

3 个答案:

答案 0 :(得分:2)

您的代码中存在多个错误:

int runningSum = unsortedData[i];

你可能意味着index,而不是i。但两者都是错误的:数组中的第一个索引是0,而不是1(这是index的值)。

此外,您的递归函数至少包含一个错误:您不认为当前元素等于总和。

另一件事:你通过值将向量传递给你的函数 - 不是一个好主意:对于函数的每次调用,整个向量都是复制,这对于中等大小可能需要相当长的时间向量。在“真实”代码中,大数据类型应始终通过(const)引用传递。只需稍微更改功能签名:

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

这样,您将向量的不可修改引用传递给函数而不是复制它。请注意,这使得无法修改函数内部向量的数据。

答案 1 :(得分:1)

首先,在myVector[index] == runningSum时,您的函数无法有意义地处理案例。

其次,runningSum的初始值取自unsortedData[i],这是没有任何意义的,因为那时i-1。你可能意味着unsortedData[0]

答案 2 :(得分:0)

早期主要使用数据,稍后使用unsortedData。我不知道为什么编译器没有抱怨未定义unsortedData。