在Java中以递归方式打印String的反向

时间:2013-12-24 11:25:23

标签: java string recursion while-loop

由于某种原因,当字符串长度为零时,它不会出现在while循环中。有人可以帮我这个吗?

static String str1 = "";

public static void reverse(String str) {
    while (str.length() > 0) {
        str1 = str1 + str.charAt(str.length() - 1);
        StringBuffer str_buf = new StringBuffer(str);
        str = str_buf.deleteCharAt(str.length() - 1).toString();
        reverse(str);
    }
    System.out.println("String is " + str1);
}

3 个答案:

答案 0 :(得分:4)

while替换为if

if(str.length()>0)

更新

while失败的原因是,在str.length()变为0之后,它会到达递归的底部,并且控制返回到“更高”级别,其中str.length()仍为1.所以它再次自称。

因此,对于while,在它达到0之后,它将在1和0之间连续循环。

答案 1 :(得分:2)

您编码的方式是循环遍历整个字符串并递归调用该函数。因此,对于短字符串“abcd”,第一次通过将使用“abc”,“ab”和“a”调用reverse。对“abc”的反向调用将以“ab”和“a”调用reverse。如果你递归调用函数,那么你不需要像@ sanjeev-mk建议的while循环,而只需要if作为退出条件。

答案 2 :(得分:0)

我相信有一个更合适的代码来递归打印字符串反转:

public void reverseStringPrint(String inputString, int index){
    if (index < (inputString.lenght() - 1))
        reverseStringPrint(inputString, index + 1);
    System.out.print(inputString.charAt(index);
}

使用index = 0运行。

为了在输出处获得反向字符串(不仅打印它),您可以这样做:

public String reverseString(String inputString, int index){
       String restOfTheString = "";
       if (index < (inputString.lenght() - 1))
           restOfTheString = reverseStringPrint(inputString, index + 1);
       return charAt(index) + restOfTheString;
   }