需要Java中的String递归帮助

Mic*_*tin 2 java string methods recursion substring

我现在正在学习如何使用递归,并且我很难理解下面的代码是如何工作的:

    public static String reverseString(String str)
    {
        if (str.length() == 0)
             return str;
        else
            return reverseString(str.substring(1)) + str.charAt(0);
    }
Run Code Online (Sandbox Code Playgroud)

我的程序的目标是编写一个递归方法,它接受一个String作为参数并返回该String的反向形式.我也知道这段代码可行.

我只是有点困惑,为什么它的工作原理.我希望有人了解递归并知道如何解释它!我理解子串是如何工作的以及该方法如何将第一个字母与单词分开(例如Mike ---> ike + M).

我不明白的是基本案例如何达到零以及该方法如何以相反的顺序返回字符串而不是无限地通过.

任何帮助将不胜感激!

pas*_*ein 5

每次使用较短的字符串调用方法时:第一个字符将被删除并随后附加.

调用将按如下方式进行(对于您的示例"Mike"):

reverseString("Mike")
reverseString("ike") + 'M'
(reverseString("ke") + 'i') + 'M'
((reverseString("e") + 'k') + 'i') + 'M'
(((reverseString("") + 'e') + 'k') + 'i') + 'M'
((("" + 'e') + 'k') + 'i') + 'M' // base case is reduced: length is zero, therefore reverseString returns ""
(("e" + 'k') + 'i') + 'M'
("ek" + 'i') + 'M'
"eki" + 'M'
"ekiM"
Run Code Online (Sandbox Code Playgroud)

在第一次迭代中,字符串具有长度4.每次reverseString执行时,长度减小,因此它将在一定数量的调用之后完成.