搞一个简单一点、但也挺有趣的题目:给定一字符串,利用递归的方法输出其反转字符串。
首先,递归反转字符串,每条字符串的反转对象都等于其最后一个字符所形成的字符串对象拼接上最后一个字符串之前的所有字符所形成的反转对象。
Java代码1
public String reverseString(String str, int length) {
if (length > 0) {
return String.valueOf(str.charAt(length - 1)) +
reverseString(str.substring(0, length),
length - 1);
}
return "";
}
分析一下这个算法的递归过程会发现,在递归过程中,会形成很多不可变、无共享的String对象。例如“abcd”,返回结构后,在内存中会产生“a”、“ba”、“cba”、“dcba”等对象。可以在算法中传入一个StringBuilder,递归拼接字符串,最终在内存中只有返回的StringBuilder对象,不会产生大量的中间字符串对象。
Java代码2
public class TestReverseString {
public TestReverseString() {
}
public void reverseString2(String str, StringBuilder builder, int length) {
if (length >= 1) {
builder.append(str.charAt(length - 1));
reverseString2(str, builder, length - 1);
}
}
public static void main(String[] args) {
String string = "123456789";
StringBuilder builder = new StringBuilder();
new TestReverseString().reverseString2(string, builder, string.length());
System.out.println(builder.toString());
}
}