Ошибка времени выполнения в рекурсии в последующих последствиях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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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