я написал следующую функцию, как реализация this algorithm/approach, для создания Powerset (множество всех подмножеств) данной строки:вектор размера остального статическим после буксировки() вызывает для функции POWERSET
vector<string> getAllSubsets(string a, vector<string> allSubsets)
{
if(a.length() == 1)
{
// Base case,
allSubsets.push_back("");
allSubsets.push_back(a);
}
else {
vector<string> temp = getAllSubsets(a.substr(0,a.length()-1),allSubsets);
vector<string> with_n = temp;
vector<string> without_n = temp;
for(int i = 0;i < temp.size()-1;i++)
{
allSubsets.push_back(with_n[i] + a[a.length()-1]);
allSubsets.push_back(without_n[i]);
}
}
return allSubsets;
}
Однако, похоже, кто-то ошибается: размер temp
и allSubsets
остается статичным от рекурсивного вызова к рекурсивному вызову, когда они должны увеличиваться из-за вызовов push_back()
. есть ли причина, почему это произойдет?
Измените аргумент 'allSubsets', который будет передаваться по ссылке вместо значения. Используйте 'vector & allSubsets'. –
Это не проблема, так как он возвращает свои изменения во всеSubsets, а затем возвращается в свои локальные allSubsets. Его ценность должна быть включена. – Puppy
Кажется, с этим связано несколько разных проблем. Правильный ответ нужно будет решать со всеми из них. Будьте терпеливы, прежде чем отвечать! Честно говоря, меня немного смущает весь дизайн; не следует getAllSubsets просто взять один параметр, строку? –