Я пытаюсь решить вопрос, в котором мы должны найти все те подмножества массива/вектора, которые в сумме равны определенному пользователем числу. Я решил решить ее рекурсивно, используя векторы. Вот код -
#include <bits/stdc++.h>
using namespace std;
vector<int> v1{1,2,3};
int n = v1.size();
int sum = 4;
int subset(vector<int> cur, int i);
int main() {
vector <int> v;
cout<<subset(v,0);
return 0;
}
int subset(vector<int> cur, int i = 0){
if (i == n && accumulate(cur.begin(), cur.end(), 0) == sum)
return 1;
else if (i == n && accumulate(cur.begin(), cur.end(), 0) != sum)
return 0;
return (subset(cur, i+1) + subset(cur.push_back(v1[i]), i+1));
}
Я получаю сообщение об ошибке «недопустимое использование выражения void», хотя функция подмножества имеет тип int и возвращает целочисленное значение. Где я ошибаюсь?
Ошибка в строке return (subset(cur, i+1) + subset(cur.push_back(v1[i]), i+1));
cur.push_back
есть декларация - void push_back (const value_type& val);
Возвращает пустоту.
push_back
возвращаетсяvoid