Как использовать рекурсию для создания последовательностей подстрок в java - PullRequest
0 голосов
/ 03 февраля 2020

Итак, задача состоит в том, чтобы создать строку, которая продвигается по буквам строки, возвращая подстроку постепенно дольше. Например, если ввод - Book, ответ будет: BBoBooBook. Для входного супа метод вернет SSoSouSoup. Я хочу написать это рекурсивно. В моем текущем методе я не получаю ошибки, но в то же время не отвечаю компилятору.

public static String stringProgression(String str) {
        int index = 1;
        String result = "";
        if (str.length() == 0) {
            return "" ;
        } else while (index <= str.length()); {
                result = result + stringExplosion(str.substring(0, index));
                index++;
        } 
        return result;
    }

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

В вашем коде вы используете два разных имени метода, stringProgression и stringExplosion.

Кроме того, у вас есть while l oop с точкой с запятой, while (index <= str.length());, которая образует пустой л oop. Поскольку index не изменяется в этом пустом l oop, оно будет бесконечным l oop, когда условие будет выполнено.

Как правило, while l oop противоречит намерению чтобы иметь рекурсивное решение.

Чтобы найти рекурсивное решение проблемы, вы должны найти в ней самоподобие. Т.е. когда вы смотрите на ожидаемый результат для Book, BBoBooBook, вы можете распознать, что начало, BBoBoo - это правильный результат для строки Boo, а BBo - правильный результат для Bo , Таким образом, исходная строка должна быть добавлена ​​к результату рекурсивного вычисления подстроки:

public static String stringProgression(String str) {
    if(str.isEmpty()) {
        return str;
    }
    return stringProgression(str.substring(0, str.length() - 1)) + str;
}

Альтернативный, более короткий синтаксис для этого:

public static String stringProgression(String str) {
    return str.isEmpty()? str: stringProgression(str.substring(0, str.length() - 1)) + str;
}
0 голосов
/ 03 февраля 2020

Отметьте это:

    private static String doStringProgression(String str, String res, int length) {
        if(length > str.length()) {
            return res;
        }
        return doStringProgression(str, res + str.substring(0, length), length + 1);
    }

И вы можете вызвать метод с помощью ввода, как в следующем примере:

    public static String stringProgression(String str) {
        return doStringProgression(str, "", 1);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...