Да, вы, вероятно, захотите пойти по нему по-другому. Это довольно глупо делать рекурсию, когда будет выполняться простой цикл. Вместо этого рекурсия - это инструмент для использования в более разном стиле покорения. То есть разделите на две части, затем примените ту же функцию к первой части, а затем ко второй части.
Обычно у вас есть какая-то точка отсечения относительно того, когда вы действительно можете делать то, что вы хотите сделать, скажем, например, что у вас меньше N числа элементов для работы или схожего. Этот пример довольно надуманный, потому что он только приносит накладные расходы, чтобы сделать это рекурсивно.
template<class Iter>
void printVector(Iter begin, Iter end)
{
const auto dist = std::distance(begin, end);
if (0 == dist) {
return;
} else if (1 == dist) {
std::cout << *begin;
} else {
// Find the middle
auto pivot = begin + dist/2;
// Apply to first part
printVector(begin, pivot);
// Print separator
std::cout << " ";
// Apply to second part
printVector(pivot, end);
}
}
Прошу простить любые опечатки и другие проблемы. О, я сделал его также шаблоном, чтобы он принимал итераторы произвольного доступа. Это было главным образом потому, что было досадно добираться до типа vector<int>::iterator
. Это, вероятно, должно быть vector<int>::const_iterator
.
vector <> :: итератор - это итератор с произвольным доступом, поэтому другой способ написать 'if (it1! = It2-1)' is 'if (it1
JackyZhu