我如何能够创建一个递归函数,该函数应该将其参数作为int的向量接受。
我甚至需要输入所有输入的偶数,同时减去所有奇数,我该怎么做?
答案 0 :(得分:3)
你正试图以错误的方式解决问题。首先,迭代解决方案比递归解决方案更直接(并且更有意义)。但是,如果你确实需要递归解决方案,那么采用一对迭代器的函数就更有意义了:
template <typename ForwardIterator>
typename std::iterator_traits<ForwardIterator>::value_type
do_math_stuff(ForwardIterator first, ForwardIterator last)
{
if (first == last)
return 0;
return (*first % 2)
? (*first + do_math_stuff(std::next(first), last))
: (*first - do_math_stuff(std::next(first), last));
}
int main()
{
std::array<int, 8> x = { 1, 2, 3, 4, 5, 6, 7, 8 };
int result = do_math_stuff(x.begin(), x.end());
}
如果你编写一个以整个容器作为参数的函数,你必须为函数的每次递归调用创建一个全新的容器,这很愚蠢。通过让函数将迭代器放入容器中,您不仅允许该函数与任何前向可迭代范围一起使用,而且还不再需要任何容器副本。
算法应该根据迭代器而不是容器来实现。