我很难理解使用以下代码反转字符串的调用堆栈:
public static String reverseString(String str) {
String reverse = "";
if (str.length() == 1) {
return str;
} else {
reverse += str.charAt(str.length() - 1) + reverseString(str.substring(0, str.length() - 1));
return reverse;
}
}
您可以看到堆栈从1堆积到4,然后从4堆积到1。 以str =“ abcd”为例。它应该首先返回“ a”(因为首先从调用堆栈弹出“ a”),这不会反转字符串。我在这里弄错了吗?谢谢!
答案 0 :(得分:1)
仔细考虑代码中的以下代码段:
else {
reverse += str.charAt(str.length() - 1) + reverseString(str.substring(0, str.length() - 1));
return reverse;
}
调用堆栈正在递归使用最后一个字符被排除的函数,并将被排除的字符附加到变量reverse。
您所缺乏的是,首先,调用堆栈将返回最后一个排除的字符(d),而不是您提到的“ a”,并将其附加到字符串“ reverse”。
手动重复代码:
反向输入// reverseString(输入)
1. d abcd
2. c abc
3. b ab
4. a // a返回长度为1的if块
您会看到反向字符串随每个调用而建立。
答案 1 :(得分:1)