2014-09-27 2 views
-1

Я пытаюсь решить эту проблему рекурсивно. У меня с трудом возвращается строка:Как использовать рекурсию для возврата строки?

string reverse(string); 

int main() { 
    cout << reverse("1234") << endl; 

} // end main 

string reverse(string integer) { 
    if (integer == "") 
     return ""; 
    else 
     return reverse(integer.substr(1, integer.length())); 
} // end reverse 

Я знаю, что функция имеет небольшую проблему (надеюсь). Не могли бы вы помочь мне исправить это? Спасибо,

+1

_ "Можете ли вы мне помочь выдумайте это? »_ Ну, все ваши [_'small issue'_] (http://ideone.com/ZzhiuT), кажется, вы« возвращаетесь »», «наконец. –

+0

Отредактировал вопрос только для вас, – Grendizer

+0

@ πάνταῥεῖ, эта часть в порядке, другой оператор возврата нуждается в исправлении –

ответ

1

Попробуйте один

string reverse(string integer) { 
    if (integer.length() == 0) 
     return ""; 
    else 
     return reverse(integer.substr(1, integer.length())) + integer.substr(0,1); 
} // end reverse 

См live demo.

+0

Хорошо сделано. Мистер Поток! Спасибо! – Grendizer

+0

Btw, почему вы проголосовали за вопрос? Пожалуйста, посоветуйте мне, чтобы я не повторил ту же ошибку. – Grendizer

+0

@ user3700785 _ «Btw, почему вы проголосовали за вопрос?» _ Потому что мне пришлось исправить несколько проблем (например, «void main()» и т. Д.), Чтобы получить код, который вы разместили. (Снял мой DV сейчас BTW) –

0

Ваша проблема заключается в том, что вы сохраняете рекурсию на более коротких строках, пока не достигнете пустой строки.
С тех пор, как вы никогда не делали do что-либо из результата рекурсивного вызова, вы также получаете пустую строку.

Если вы хотите, чтобы первый символ строки завершился в результате, вы должны использовать его где-то, вы не можете просто выбросить его.

Вы должны поставить первый символ в задней части результате реверсирования остальную часть строки, как это:

string reverse(string s) 
{ 
    if (s == "") 
     return ""; 
    else 
     return reverse(s.substr(1, s.length())) + s[0]; 
} 

или, короче

string reverse(string s) 
{ 
    return s.empty() ? "" : reverse(s.substr(1)) + s[0]; 
} 
Смежные вопросы