C++向量值的总和(递归)
C++ sum of vector values (recursive)
以下内容旨在对向量中的整数求和:
#include <iostream>
#include <vector>
int arraySum(std::vector<int> vec, std::vector<int>::iterator start, std::vector<int>::iterator finish)
{
if (vec.size()==1)
{
return vec[0];
}
else
{
if (start!=finish)
{
return *start + arraySum(vec, start+1, finish);
}
}
}
int main()
{
std::vector<int> intVec(5);
intVec[0] = 1;
intVec[1] = 2;
intVec[2] = 3;
intVec[3] = 4;
intVec[4] = 5;
std::cout << arraySum(intVec, intVec.begin(), intVec.end());
return 0;
}
目前,这是向控制台返回无意义的值,例如 7 位数字。
请不要提供完整而详细的解决方案,而是提供一些提示。小段代码也可以。
您不会为递归中的所有路径返回值。
如果函数应该返回一个值,例如您案例中的int
,则需要为函数中的所有条件返回一个值。对于start == finish
.
在这种情况下,该函数可能返回一个垃圾值,您正在将其添加到总和中。
只需在函数末尾添加return 0;
就可以为我解决这个问题,因为只有start == finish
.
在出现警告时对其进行诊断非常重要,它们通常会在代码中显示问题或错误。如果您没有看到任何警告标志,我强烈建议您在编译器中添加警告标志,以便更容易捕获此类错误,我会至少添加-Wall -Wextra
.
在提供的答案/注释的帮助下,函数中的代码现在如下所示。我在这里发布它是为了这个问题的未来读者的利益:
int arraySum(std::vector<int>::iterator start, std::vector<int>::iterator finish, int sum)
{
if (start != finish)
{
sum += *start;
return arraySum(++start, finish, sum);
}
return sum;
}
相关文章:
- 以C++递归方式查找向量中的最大值
- 尾递归,带有通过引用传递的向量
- 返回向量 C++ 上的递归
- 递归回文检查,不使用向量、大小或其他参数
- n维向量的递归可变参数模板函数
- 在不使用递归的情况下求解所有 2D 字符串向量组合?(C++)
- 使用迭代器对向量的C 递归初始化产生不一致的结果
- 我们应该全局声明一个向量还是在递归函数中传递它以减少内存使用
- 递归向量中的最小正数
- 使用递归C++向量元素的总和
- 如何在递归函数中打印向量
- 递归结构的向量有内存问题
- 递归函数,返回向量中所有元素的总和
- 使用递归的C 在向量中找到非齐射的数量
- boost::variant:具有递归向量类型的奇怪行为
- 在递归函数中收集cout或输出为向量
- 从向量中删除重复项,递归 c++
- 使用递归将元素添加到向量中
- 迭代和递归地查找向量中是否存在元素
- 递归对向量进行排序的最简单方法