Ваша проблема в том, что вектор v
в gen
является локальным объектом функции, поэтому каждый вызов gen
имеет свой собственный v
.Это не то, что вам нужно, поскольку вы хотите, чтобы все рекурсивные вызовы заполнялись одинаково v
.
У вас есть несколько способов исправить это.Вы можете сделать v
статическим, но тогда вы можете вызвать функцию только один раз.Вы могли бы сделать v
глобальной переменной, но тогда вам нужно помнить, что нужно вызывать clear()
на векторе после каждого запуска gen
.Наконец, вы можете создать вспомогательную функцию, которая объявляет вектор и затем передает его в вашу рекурсивную функцию для использования.Это ИМХО является более правильным решением, так как не требует вмешательства пользователя.Это дало бы вам
void gen(int k, std::vector<int>& v) {
if (k == n + 1) {
cout <<"(";
for (auto i = v.begin(); i != v.end(); ++i){
cout << *i ;
}
cout <<")";
}
else {
gen(k + 1, v);
v.push_back(k);
gen(k + 1, v);
v.pop_back();
}
}
void gen(int k) {
vector<int> v;
gen(k, v);
}
int main(){
gen(1);
return 0;
}