Один из вариантов будет выглядеть примерно так:
void PopulateVector(vector<int>& vec, int n) {
if (n < 0) return;
PopulateVector(vec, n - 1);
vec.push_back(n);
}
Идея заключается в следующем.Во-первых, если вы пытаетесь создать вектор со значениями от 0 до некоторого отрицательного числа, мы ничего не делаем;нет значений для добавления.В противном случае мы сначала заполняем вектор значениями от 0 до n - 1, затем добавляем n к вектору.
Обратите внимание, что это очень неэффективная процедура с точки зрения использования памяти;это требует линейной памяти для стека вызовов.Итерационная версия, вероятно, будет намного лучше.Мы можем переписать эту функцию, чтобы она была хвостовой рекурсивной, и надеемся, что оптимизатор исключит рекурсию, но нет никакой гарантии, что это произойдет (в то время как IIRC, Схема требует устранения хвостовых вызовов).Идея состоит в том, чтобы использовать функцию-обертку, чтобы мы могли считать до n, а не от n:
void PopulateVector(vector<int>& vec, int n) {
if (n < 0) return;
PopulateVectorRec(vec, 0, n);
}
void PopulateVectorRec(vector<int>& vec, int current, int n) {
if (current > n) return;
vec.push_back(current);
PopulateVectorRec(vec, current + 1, n);
}
Надеюсь, это поможет!