Рекурсия вызывает один и тот же метод снова и снова, пока не будет достигнуто условие завершения.
Итак, начните с выбора условия завершения. Мы будем анализировать строку up char по char, пока ничего не останется, поэтому хорошим условием завершения здесь является пустая строка. (Это то, что вы уже правильно сделали.)
Затем мы разбиваем строку, чтобы посмотреть на нее по одному символу за раз, символ head
, остаток строки - tail
.
В зависимости от содержимого головы мы либо сохраняем символ, либо заменяем на "aaa"
, но в обоих случаях мы возвращаемся к replaceAwithAAA
с хвостом.
Поскольку хвост каждый раз короче , это гарантированно приведет к пустой строке и, таким образом, в какой-то момент будет конечным sh.
public static String replaceAwithAAA(String s) {
if (s.length() == 0) return ""; // termination condition
char head = s.charAt(0);
String tail = s.substring(1);
if (head == 'a') { // hint: this could also be `s.startsWith("a")`
return "aaa" + replaceAwithAAA(tail); // recursion
} else {
return head + replaceAwithAAA(tail); // recursion
}
}
Я уверен, что вы можете настроить moreAs
, чтобы больше представлять эту структуру. Наличие for
l oop внутри вашего метода является ошибкой, вместо этого зацикливается стек вызовов.