Java递归简单字符串
下面的代码工作得很好,它反转了一个字符串。但是,我不明白它是如何工作的。我认为它应该返回一个空字符串,因为每次我们调用reversedString(sub); 它时都会取出索引 0 处的字符,所以我们应该以一个空字符串结尾。
import components.simplewriter.SimpleWriter;
import components.simplewriter.SimpleWriter1L;
public final class HelloWorld {
private static String reversedString(String s) {
if (s.length() == 0) {
return s;
} else {
String sub = s.substring(1);
String revSub = reversedString(sub);
String result = revSub + s.charAt(0);
return result;
}
}
public static void main(String[] args) {
SimpleWriter out = new SimpleWriter1L();
out.println(reversedString("Banana"));
out.close();
}
}
回答
我听说你喜欢可视化:
reversedString("Banana");
----------------------/
|
/---------------------------
reversedString("anana") + "B";
---------------------/
|
/--------------------------
reversedString("nana") + "a" + "B";
--------------------/
|
/-------------------------
reversedString("ana") + "n" + "a" + "B";
-------------------/
|
/------------------------
reversedString("na") + "a" + "n" + "a" + "B";
------------------/
|
/-----------------------
reversedString("a") + "n" + "a" + "n" + "a" + "B";
-----------------/
|
/----------------------
reversedString("") + "a" + "n" + "a" + "n" + "a" + "B";
----------------/
|
/-
""