我目前正在考虑使用Java进行递归。遇到下面的代码,我无法弄清楚递归方法如何产生反向字符串。任何解释都将不胜感激!
class Backwards {
String str;
Backwards(String s) {
str = s;
}
void backward(int idx) {
if(idx != str.length()-1) {
backward(idx+1);
}
System.out.print(str.charAt(idx));
}
}
class BWDemo {
public static void main(String args[]) {
Backwards s = new Backwards("This is a test");
s.backward(0);
}
}
答案 0 :(得分:2)
如果使用笔和纸进行调试,可以很容易地看到发生了什么。
基本上 - 它转到字符串的末尾并从头到尾开始用char打印char。
答案 1 :(得分:1)
查看backward
方法。它能做什么?
一步一步:
因此,如果我们正在扩展递归调用,那么(对于字符串" hel"):
可视化:
所以,最后的输出是" leh",这就是我们想要的。
答案 2 :(得分:1)
以字符串“ABCD”为例。
backward(0)
{
backward(1)
{
backward(2)
{
backward(3)
{
print D
}
print C
}
print B
}
print A
}
答案 3 :(得分:0)
向后看一下方法。
void backward(int idx) {
if(idx != str.length()-1) {
backward(idx+1);
}
System.out.print(str.charAt(idx));
}
它需要一个索引号并打印该索引位置的字符。 然后它再次调用它自己(这就是为什么它是递归的)但现在索引增加1,因为你想要打印下一个字符 - 向后(idx + 1); < / p>
查看不同索引号的效果:
Backwards s = new Backwards("test");
指数= 0 s.backward(0); 输出:tset
指数= 1 s.backward(1); 输出:tse
指数= 2 s.backward(2); 输出:ts
答案 4 :(得分:0)
你的班级:
public class Backwards {
String str;
Backwards(String s) {
str = s;
}
String backward(int i) {
int j = i+1;
if(i <= str.length())
return str.charAt(str.length()-i) + backward(j);
return "";
}
}
主要:
public static void main(String[] args) {
Backwards s = new Backwards("This is a test");
System.out.println(s.backward(1));
}
答案 5 :(得分:0)
尝试一下:
private static String reverse(String str) {
if (str == null || str.length() == 0) return "";
return str.toCharArray()[str.length() - 1] + reverse(str.substring(0, str.length() - 1));
}
希望它会有所帮助。