Ошибка времени выполнения в рекурсии в последующих последствияхC++

Программы на C++. Форум разработчиков
Anonymous
Ошибка времени выполнения в рекурсии в последующих последствиях

Сообщение Anonymous »

Я пишу рекурсивную функцию для создания всех возможных последующих последствий строки и возврата набора строк в качестве вектора. Это задача от кодирования ниндзя. Я повторяюсь над каждым символом в строке и генерирую два случая, хочу ли я сохранить символ или удалить его из строки и когда базовый случай попадает, генерируемая строка добавляется в вектор 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

Вернуться в «C++»