Я пишу рекурсивную функцию для создания всех возможных последующих последствий строки и возврата набора строк в качестве вектора. Это задача от кодирования ниндзя. Я повторяюсь над каждым символом в строке и генерирую два случая, хочу ли я сохранить символ или удалить его из строки и когда базовый случай попадает, генерируемая строка добавляется в вектор ANS , который содержит все последующие. Вот как выглядит мой код: < /p>
Код: Выделить всё
void recurse(string str, string value, int idx, vector &ans){
//base case
if(idx < 0 && !value.empty()){
ans.push_back(value);
return;
}
//keep letter
recurse(str, value, idx-1, ans);
//delete letter
value.erase(idx,1);
recurse(str, value, idx-1, ans);
}
vector subsequences(string str){
vector ans;
string value = str;
recurse(str, value, str.size()-1, ans);
return ans;
}
Это дает ошибку среды выполнения в функции IF Condight in Recurse: if (idx
Код: Выделить всё
//base case
if(idx < 0){
if(!value.empty()) ans.push_back(value);
return;
}
Условие необходимо, чтобы последняя пустая строка не была добавлена в вектор ANS . Может ли кто -нибудь объяснить, почему, когда проверяя 2 условия вместе, используя && , дает ошибку во время выполнения, но при отдельной проверке их с вложенным блоком он работает совершенно хорошо?
Подробнее здесь:
https://stackoverflow.com/questions/795 ... bsequences