递归算法对数组中值小于x的每个元素求和
recursive algorithm to sum of every element in an array with a value lesser than x
我是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,当我运行代码时,我收到了以下警告:"警告C4715:‘sumOfElement’:并非所有控制路径都返回值。"当程序要求我输入x的整数值时,它总是停止执行。
我的代码出了什么问题?
这里的方法并不是递归的。递归的想法是考虑一个基本情况,然后考虑如何在每一步减少问题,直到找到基本情况。
对于这个问题:
- 基本情况是数组的长度为零时。在这种情况下,我们返回的和为零。(直观地说:如果数组为空,那么我们什么都不加,得到的和为零。(
- 为了减少我们的数组,我们查看数组的最后一个元素(即
lengthOfArray - 1
(。我们处理这个元素:如果它小于x
,我们将添加它,如果它不小于,我们将忽略它。然后,我们通过相同的方法(通过调用相同的函数,但使用不同的数组长度(处理数组的其余部分,并在适用的情况下添加我们的结果
因此,一些示例代码:
int sumOfElement(int xList[], int x, int lengthOfArray){
if (lengthOfArray == 0) {
// base case
return 0;
} else {
int value = xList[lengthOfArray-1];
if (value < x) {
// process the rest of the array and add our result
return value + sumOfElement(xList, x, lengthOfArray - 1);
} else {
// process the rest of the array
return sumOfElement(xList, x, lengthOfArray - 1);
}
}
}
for (int i=0; i <= lengthOfArray; i++)
{
if(xList[i] < x)
return sum + xList[i];
else sumOfElement(xList,x,lengthOfArray-1);
}
你不应该有一个for循环,递归函数应该"返回"更深层次的调用,所以
int retVal = 0;
if(xList[lengthOfArray-1] < x)
retval = xList[lengthOfArray-1]
return retVal + sumOfElement(xList,x,lengthOfArray-1);
相关文章:
- 如何对多维 std::vector 的所有元素求和?
- 使用 C++17 或更高版本对向量中的元素对求和的最'functional'方法?
- 在 MPI 中逐个元素对数组元素求和和收集
- 以C++递归方式对链表中的元素求和
- CUDA:所有矢量元素的级联求和
- 将彼此平行的两个 int 向量的元素求和
- 使用变换和加 () 对向量的元素进行求和和模 10^9+7<int>。有什么办法可以做到这一点吗?
- 用以下方法对数组中的元素求和的有效方法是什么
- 难以对 2D 矢量的元素求和
- 循环访问 CUDA 中的三维数组以对它们的元素求和
- 如何将函数静态应用于非类型模板包的各个元素并对结果求和
- 我如何确定我是否可以将数组中的某些元素求和为 K
- 在C++中使用do-while循环对向量的元素求和
- 在c++中对最小数组元素求和
- 递归算法对数组中值小于x的每个元素求和
- 如何使用本函数对两个字符数组进行元素相乘,并将相乘结果求和为int
- 如何对一个公共矩阵中的所有元素求和
- 通过迭代器对map的元素求和
- 如何在c++中对multimap中具有相同键的所有元素求和
- 在一个数组中查找求和为k的两个元素