java语义理解递归反向字符串返回语句
目前我对递归越来越熟悉,为了进一步理解它,我想在反转字符串的上下文中研究它。我知道它没有使用StringBuffer那么有效,但就像我说的,这主要是为了帮助更好地理解。我知道有一些问题,所以关于这一点,但我想在演练中得到一些帮助
return reverse(str.substring(1)) + str.charAt(0);
此场景中的字符串=“开始”
我知道substring方法使用的是没有第一个字符的子字符串
递归调用。(部分)
reverse("Start")
reverse("tart")
reverse("art")
reverse("rt")
reverse("t") // when string is 1 char length then the reverse string is returned
但我想了解一下在递归演练中它是如何连接和重建字符串的
提前谢谢
# 1 楼答案
对于递归,最好考虑有一个基本情况和一个递归调用
我猜你有这样的想法:
最后的返回调用只是从字符串中提取第一个字符,并将其连接到
reverse
的递归调用。因此,逐渐变短的字符串的第一个字符总是被追加到字符串的末尾,即被颠倒与其考虑递归的每个阶段,不如只看基本情况和递归调用。使用归纳的过程,你可以确定递归会起作用
事实上,我认为在这种情况下,从一个包含3个字符的字符串开始,例如“str”,可以更容易地看到发生了什么。如果有效,它将适用于所有情况(这是归纳法)
# 2 楼答案
声明
表示“反转最后的n-1个字符,并将第一个字符移到末尾”(其中字符串的长度为n)。如果您考虑一下,通过以下方式跟踪递归调用,这是有意义的:
假设在剩下一个空字符串时有一个合适的停止条件,方法调用现在会逐个返回: