语义上理解递归反向字符串返回语句

L-S*_*els 1 java recursion

目前我熟悉递归并试图进一步理解我想在逆转字符串的背景下看一下.我知道它不如使用StringBuffer那样高效,但我说这主要是为了帮助我们更好地理解.我知道有关于此问题的一些问题,但我想在演练中提供一些帮助.

                 return reverse(str.substring(1)) + str.charAt(0);
Run Code Online (Sandbox Code Playgroud)

此场景中的字符串="开始"

我知道substring方法是在没有第一个字符的情况下获取子字符串

递归调用.(部分)

reverse("Start")
reverse("tart")
reverse("art")
reverse("rt")
reverse("t") // when string is 1 char length then the reverse string is returned
Run Code Online (Sandbox Code Playgroud)

但我想了解它如何在递归演练中连接和重建字符串.

提前致谢.

小智 5

该声明

return reverse(str.substring(1)) + str.charAt(0);
Run Code Online (Sandbox Code Playgroud)

是说"反转最后的n-1个字符并将第一个字符移动到结尾"(字符串的长度为n).如果您考虑通过以下方式跟踪递归调用,这是有道理的:

reverse("tart") + "S"
(reverse("art") + "t") + "S"
((reverse("rt") + "a") + "t") + "S"
(((reverse("t") + "r") + "a") + "t") + "S"
((((reverse("") + "t") + "r") + "a") + "t") + "S"
Run Code Online (Sandbox Code Playgroud)

当你留下一个空字符串时假设一个合适的停止条件,方法调用现在逐个返回:

(((("t") + "r") + "a") + "t") + "S"
((("tr") + "a") + "t") + "S"
(("tra") + "t") + "S"
("trat") + "S"
"tratS"
Run Code Online (Sandbox Code Playgroud)