【发布时间】:2014-07-10 05:37:21
【问题描述】:
您好,我正在尝试理解下面的递归方法,但它似乎太混乱了。我知道 reversePrint 方法调用它自己,但我的问题是,它第一次运行它应该打印 bcdef + a = bcdef。这是我感到困惑的地方,下一次运行时 b 变成了 charAt(0) ......那么 a 在哪里?它们会暂时存储在某个地方吗?有人可以帮我理解它。非常感谢
public static void main(String[] args) {
// TODO code application logic here
System.out.println(reversePrint("abcdef"));
}
public static String reversePrint(String s) {
if (s.length() <= 1) {
return s;
}
return reversePrint(s.substring(1)) + s.charAt(0);
}
【问题讨论】:
-
使用你的编译器。它会告诉你一切
-
尝试在调试模式下逐步运行。这将是说明性的。
-
'a' 是对 s.charAt(0) 的第一次调用。这样想吧。要反转字符串,请创建一个新字符串,其中第一个字符位于其余字符的反转末尾。等等……
-
关于临时变量的东西你很困惑,看看堆栈帧是如何工作的programmerinterview.com/index.php/recursion/…