使用Java中的递归来反转String

时间:2014-04-23 07:35:12

标签: java string recursion reverse

我目前正在考虑使用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);
    }
}

6 个答案:

答案 0 :(得分:2)

如果使用笔和纸进行调试,可以很容易地看到发生了什么。

基本上 - 它转到字符串的末尾并从头到尾开始用char打印char。

答案 1 :(得分:1)

查看backward方法。它能做什么? 一步一步:

  1. 如果那不是最后一个字符(最后一个字符的索引),则在下一个字符索引处调用此函数
  2. 打印出当前字符。
  3. 因此,如果我们正在扩展递归调用,那么(对于字符串" hel"):

    1. 向后调用(0)(最后将打印第0个字符)
    2. 它将向后调用(1)(最后将打印第1个字符)
    3. 它会向后调用(2)(...)
    4. 不会调用递归调用,因为2-nd charater是最后一个
    5. 第三个电话会在打印完最后一个电影后结束:" l"
    6. 控件将转到上一个调用,这将输出" e"
    7. 控制将转到第一个后退调用,它将输出" h"
    8. 可视化:visualizations

      所以,最后的输出是" 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));
}

希望它会有所帮助。