使用递归来反转字符串的方法

Lex*_*ito 2 java recursion

public static void main(String args[]) {
    System.out.println(reverseString("His"));
}

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

有人可以详细解释我这个方法是如何工作的

ars*_*jii 5

我认为理解这些类型的方法如何工作的最好方法是通过一个简单的例子手工完成它们.让我们拿出字符串"abc",考虑一下我们打电话时会发生什么

reverseString("abc")
Run Code Online (Sandbox Code Playgroud)

在第一次迭代中,我们考虑else块(因为"abc".length()不小于或等于1).该方法返回

reverseString("abc".substring(1)) + "abc".charAt(0)
Run Code Online (Sandbox Code Playgroud)

这相当于

reverseString("bc") + 'a'
Run Code Online (Sandbox Code Playgroud)

现在我们必须考虑reverseString("bc").再次,我们发现自己在else块中,该方法将返回

reverseString("bc".substring(1)) + "bc".charAt(0)
Run Code Online (Sandbox Code Playgroud)

这相当于

reverseString("c") + 'b'
Run Code Online (Sandbox Code Playgroud)

显然,reverseString("c")仅仅是"c"-那么reverseString("bc")"cb"哪些,通过以上,意味着reverseString("abc")"cb" + 'a'给了我们"cba",符合市场预期.


总而言之,我们基本上是这样做的:

reverse("abc")
reverse("bc") + 'a'
reverse("c") + 'b' + 'a'
"cba" 
Run Code Online (Sandbox Code Playgroud)

使用4个字符的字符串:

reverse("abcd")
reverse("bcd") + 'a'
reverse("cd") + 'b' + 'a'
reverse("d") + 'c' + 'b' + 'a'
"dcba" 
Run Code Online (Sandbox Code Playgroud)