这段代码反转传递给它的字符串参数。我知道字符串是不可变的。我似乎不明白发生了什么。它在哪里存储它返回的反向字符串。
public static String reverseRecursively(String str) {
//base case to handle one char string and empty string
if (str.length() < 2) {
return str;
}
return reverseRecursively(str.substring(1)) + str.charAt(0);
}
答案 0 :(得分:1)
您的reverseRecursively(str.substring(1)) + str.charAt(0)
每次调用时都会创建一个新的String
对象。
答案 1 :(得分:1)
它在哪里存储它返回的反向字符串。
正如方法所示,它以递归方式调用自身。每次调用它都会向调用堆栈添加条目。因此,如果您关注存储这些“中间”结果的魔力,请阅读调用堆栈的工作原理。
答案 2 :(得分:1)
这是一个说明数据流的调用图:
每次调用都返回一个字符串副本,其中第一个字符放在最后一个字符,其余字符由进一步调用处理对这些字符串的引用存储在堆栈中,随着每次调用而增长(需要更多的堆栈空间来处理更长的字符串)。