C++ 递归函数误差
我有一个程序,应该把用户的值读入向量。然后,我的函数应该保持一个运行的和,并从元素1开始,将元素2与和进行比较(这一点只是元素1)。移动到下一个元素,将元素2添加到总和,然后查看元素3是否大于元素1和2的总和。我应该只打印大于总和的元素。我很难让它打印出任何值。有人能告诉我我可能做错了什么吗?谢谢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
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:这是一个寻求帮助的地方!这不是一个措辞最好的问题,但绝对不是一个“请发送家庭作业”的问题。