java - 调用堆栈反转字符串使用递归
问题描述
我很难理解反转字符串的调用堆栈使用以下代码:
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”首先从调用堆栈弹出),它不会反转字符串。我这里有什么问题吗?谢谢!
解决方案
仔细考虑代码中的以下块:
else {
reverse += str.charAt(str.length() - 1) + reverseString(str.substring(0, str.length() - 1));
return reverse;
}
调用堆栈正在递归排除最后一个字符的函数,并将排除的字符附加到变量 reverse 中。您所缺少的理解是,首先调用堆栈返回最后一个排除字符,即“d”,而不是您提到的“a”,并将其附加到字符串“reverse”。
手动重复代码:
reverse input //reverseString(input)
1. d abcd
2. c abc
3. b ab
4. a a //return a as length is 1, if block
你可以看到反向字符串随着每个称呼。
推荐阅读
- anaconda - 无法启动 anaconda 导航器
- c# - 一个 SQL 数据表可以容纳多少行
- javascript - 在创建项目时反应 Dout?
- javascript - Jquery手风琴向下滚动
- assembly - 检查一个或多个数字的符号
- python-3.x - 如何在 Python 中将文件路径写入 txt 文件
- javascript - 如何制作键值对并将其推送到 React 中?
- javascript - 无法让我的背景图像根据屏幕尺寸扩展正确变形
- emacs - 如何在 Emacs 中输入 pkill -SIGUSR2 emacs
- css - How to exclude multiple Wordpress pages from custom CSS