关于递归和向量的快速问题

Quick question on Recursion and vectors

本文关键字:向量 问题 于递归 递归      更新时间:2023-10-16

我如何能够创建一个递归函数,该函数应接受其参数作为整数向量。

几乎我需要添加所有输入的偶数,而减去所有奇数,我将如何做到这一点?

你试图以错误的方式解决问题。 首先,迭代解决方案在这里比递归解决方案简单得多(并且更有意义)。 但是,如果您确实需要递归解决方案,则采用一对迭代器的函数更有意义:

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());
}

如果你编写一个将整个容器作为参数的函数,你必须为函数的每个递归调用创建一个全新的容器,这太愚蠢了。 通过让函数将迭代器引入容器,您不仅允许该函数与任何向前可迭代范围一起使用,而且还不再需要创建容器的任何副本。

算法应该根据迭代器而不是容器来实现。