以下可能旨在求和向量中的整数:

#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

09-07 12:08