我是一名C++的初学者,正在尝试编写一个递归算法,该算法返回数组中每个小于x值的元素的总和。
这是我的代码:
#include <iostream>
using namespace std;
int sumOfElement(int xList[],int x, int lengthOfArray){
int sum = 0;
if (lengthOfArray == 0)
return sum;
else
for (int i=0; i <= lengthOfArray; i++) {
if(xList[i] < x)
return sum + xList[i];
else
sumOfElement(xList,x,lengthOfArray-1);
}
}
int main() {
cout << "Size of Array: ";
int size;
cin >> size;
int *xList = new int[size];
//Inputing array.
cout << "Enter elements of array followed by spaces: ";
for (int i = 0; i<size; i++)
cin >> xList[i];
cout << "Enter the integer value of x: " <<endl;
int limit;
cin >> limit;
cout << "Sum of every element in an array with a value less than x: " << sumOfElement(xList,limit,size) << endl;
return 0;
}
我正在使用Visual Studio,运行代码时出现了这个警告:“warning C4715:'sumOfElement':不是所有控制路径都返回值。” 而当程序要求我输入整数x时,程序总是停止执行。
我的代码有什么问题吗?
if (lengthOfArray = 0)
看起来不太对。 翻译:这段代码的条件语句应该是在判断lengthOfArray
是否等于0,而不是将其赋值为0。正确的写法应该是if (lengthOfArray == 0)
。 - Blenderfor
循环是迭代的一个例子,而不是递归。它们之间有严格的等价关系,但它们并不相同 - 它们可以实现相同的最终结果,但是使用不同的方式进行操作。递归没有显式的循环 - 它具有调用自身的函数(可能是通过其他函数间接调用)。 - user180247