递归函数,返回向量中所有元素的总和

时间:2017-10-31 17:15:03

标签: c++ recursion vector

我很困惑如何让这个函数添加向量中的最后一个元素。我无法修改函数参数。

long vectorSum(const std::vector<int>& data, unsigned int position)
{
   if (position == data.size()-1)
   {
      return 0;
   }
   else 
   {
      return (vectorSum(data, position+1) + data[position]);
   }
}

int main()
{
    //vectorSum test
   std::vector<int> data = { 1,2,3,4,5};
   unsigned int pos = 0;
   std::cout << "expected: 15, " << "actual: " << vectorSum(data, pos) << std::endl;

}

3 个答案:

答案 0 :(得分:3)

当您在data.size() -1停留时,您为vectorSum(data, data.size()-1)返回0而不计算最后一个条目的值

long vectorSum(const std::vector<int>& data, unsigned int position)
{
   if (position == data.size()) // You were stopping early
   {
      return 0;
   }
   else 
   {
      return (vectorSum(data, position+1) + data[position]);
   }
}

int main()
{
    //vectorSum test
   std::vector<int> data = { 1,2,3,4,5};
   unsigned int pos = 0;
   std::cout << "expected: 15, " << "actual: " << vectorSum(data, pos) << std::endl;

}

答案 1 :(得分:1)

当您查看最后一个元素时,您会遇到以下情况:

if (position == data.size()-1)

此时,position4data.size()5。所以条件匹配,递归结束。

您需要将==更改为>,或删除-1

答案 2 :(得分:1)

递归函数总是有两个部分:停止条件和递归。这里一个简单的停止条件是:当向量中没有元素时,总和为0.递归是:非空向量的元素之和是其第一个元素的值加上剩余元素的总和。在代码中,停止条件如下所示:

cert1Bool

在代码中,递归看起来像这样:

if (position == data.size())
    return 0;

稍微复杂的停止条件是:当向量中只有一个元素时,sum是该元素的值。在代码中:

else
    return data[position] + vectorSum(data, position + 1);

与第一个相比,它具有更少的递归级别。但它对空载体不起作用。所以选择你的毒药。

原始代码的问题在于其停止条件未正确实施。它混合了这两种停止条件。