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

时间:2011-05-12 05:09:25

标签: c++

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

我甚至需要输入所有输入的偶数,同时减去所有奇数,我该怎么做?

1 个答案:

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

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

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