2016-03-23 5 views
0

Я видел много сообщений об обращении строки с рекурсией, но мне нравится использовать собственный стиль кодирования, чтобы правильно его понять. В любом случае, вот код, который у меня есть.Как изменить строку с помощью рекурсивной функции?

private static String reverse (String s){ 

    String rev = ""; 
    int index = s.length()-1; 
    if(index >= 0){ 

     rev += s.charAt(index); 
     index--; 
     rev += reverse(rev); 


    } 
     return rev; 

    } 

В основном индекс просто продолжается для каждого отдельного символа, когда индекс равен -1, цикл останавливается. он читает последний возможный символ строки, но здесь есть ошибка в этой строке.

rev += rev(str) 

Вот итерационный метод

String dog = "dog"; 
String rev = ""; 

int index = dog.length()-1; 
while(index >= 0){ 
    rev+=dog.charAt(index); 
    index--; 

} 

out.println(rev); 
+0

Вы используете Java? – Laurel

+0

Да, я использую java. – EidA5

+2

Попробуйте добавить 'System.out.println (index);' перед рекурсией, чтобы увидеть, можете ли вы увидеть проблему. – Laurel

ответ

1

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

+0

Я знаю, но он добавляет письмо до декремента, затем, когда он возвращается, цикл пропускается, и он должен возвращать rev? правильно? – EidA5

0

Рекурсивный шаг не содержит мутированную строку. Вам нужно передать подстроку исходной строки. rev = reverse(s.substring(0,index));

+0

Хорошо, это исправлено, я просто проиндексировал слишком поздно, теперь имеет смысл поблагодарить вас. – EidA5

-1

(Добавлено ответ от имени ОП).

Это исправлено. Большое вам спасибо, я слишком поздно индексировал и передавал отрицательные числа.

private static String reverse (String s) { 

int index = s.length(); 
index--; 
String rev = ""; 
if(index >= 0){ 
    rev += s.charAt(index); 

    rev = rev + reverse(s.substring(0,index)); 
} 

return rev; 

} 
Смежные вопросы