gpt4 book ai didi

使用递归的 C++ vector 元素求和

转载 作者:行者123 更新时间:2023-11-28 01:48:19 24 4
gpt4 key购买 nike

我正在尝试以下操作来获取 vector 中所有元素的总和。根据调试器,执行了if语句内部,但结果始终为0。

double Problem1::recSum(std::vector<double> list) //public
{
return recSum(list.begin(), list.end(), 0);
}

double Problem1::recSum(std::vector<double>::iterator begin, std::vector<double>::iterator end, double sum) // private
{
if (begin != end)
{
sum += *begin;
recSum(++begin, end, sum);
}
return sum;
}

我知道 vector 已正确填充,因为我之前迭代计算过相同的总和。如果我严重误解了递归,请向我提供有关该问题的一些 Material 。

最佳答案

因为您需要返回递归的结果:

double Problem1::recSum(std::vector<double>::iterator begin, std::vector<double>::iterator end, double sum) // private
{
if (begin != end)
{
sum += *begin;
return recSum(++begin, end, sum);
}
return sum;
}

请注意,您的 recSum应该采取 const std::vector<double>& list为了避免复制你的 vector ,显然,迭代元素比在这里使用递归更好。如果你想使用递归,最好这样写:

double Problem1::recSum(std::vector<double>::iterator begin, std::vector<double>::iterator end) // private
{
return (begin != end) ? *begin + recSum(begin+1, end) : 0.0;
}

另一种选择是使用 std::accumulate :

#include <numeric>

double Problem1::recSum(const std::vector<double>& list) //public
{
return std::accumulate(list.begin(), list.end(), 0);
}

在你的情况下这很明显,因为你的 recSum没有任何副作用,并且实际上不会有所作为,因为您不使用它的返回值。所以你的函数的结果总是 0,因为你的 vector 的第一个元素是 0。通常,当你编写一些算法时,你应该尝试使用简单的输入来遍历代码,例如空 vector 、具有一个元素的 vector 和具有2个元素。对于 0 和 1 元素,它将起作用,但是对于 2 元素,它将返回错误的结果。假设您有两个 double 值 [0.0, 1.0] 的 vector ,在第一次迭代中您的总和变为 0+0.0,并且您将使用指向余数或序列的迭代器递归调用您的函数:[1.0],第二次迭代将正确计算总和为 1.0,但该结果未在任何地方使用。

关于使用递归的 C++ vector 元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com