Проблема с рекурсивным методом в обращении строки - PullRequest
0 голосов
/ 11 декабря 2018

Когда я возвращаю строку, используя рекурсивный метод, она дает мне ошибку stackOverflow.

public class ReverseString {

    public static void main(String[] args) {
        String str = "Juhi";
        System.out.println(recursiveString(str));
    }

    static String recursiveString(String str) {     
        return !str.equals("") ? recursiveString(str.substring(1) + str.charAt(0)) : str;

    }
}

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018
public static void main(String[] args) {
        String str = "Juhi";
        System.out.println(recursiveString(str));
    }

    static String recursiveString(String str) {
        return !str.equals("") ? recursiveString(str.substring(1) ) + str.charAt(0): str;

    }
}
0 голосов
/ 11 декабря 2018

рекурсивный реверс с поддержкой Unicode

В то время как другие ответы показали вам, где вы ошиблись и как написать рекурсивный алгоритм реверсирования строк, который работает для основных символов Unicode, они производятневерные результаты для дополнительных символов Юникода .Следующий метод работает для всех символов Юникода:

static String recursiveReverse(String str) {
    if (str.isEmpty())
        return "";
    int offsetToSecondCodePoint = str.offsetByCodePoints(0,1);
    return recursiveReverse(str.substring(offsetToSecondCodePoint))
            + str.substring(0, offsetToSecondCodePoint);
}
0 голосов
/ 11 декабря 2018

Это должно решить проблему:

static String recursiveString(String str) {
    return !str.equals("") ? recursiveString(str.substring(1)) + str.charAt(0) : str;
}

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

...