C++ vector 值之和(递归)

标签 c++ recursion vector

以下 could 旨在对 vector 中的整数求和:

#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

关于C++ vector 值之和(递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59488030/

相关文章:

algorithm - 具有递归函数的解决方案

r - 如何为另一个向量中的每个元素获取向量中最接近的元素而没有重复?

删除字符串中第一个 'backslash' 之后的所有内容

c++ - 删除两个 vector 中的重复项

c++ - printf 从整数转义 unicode 字符

c++ - 菜单项在 gtkmm3 中总是被禁用

c++ - 虚函数声明和定义的困惑

java - 获取数学表达式的每个排列

java - 为什么需要一个辅助方法来递归搜索二叉搜索树?

c++ - 在 C++ 中从 .mat 文件读取变量