使用递归反向字符串

时间:2015-06-11 06:47:00

标签: java recursion

有人可以解释为什么“return str”行永远不会执行吗?

public static String reverseString(String str){
    String reverse="";
    if(str.length() == 1){
        return str; //at one point this condition will be true, but value never returns
    } else {
        reverse += str.charAt(str.length()-1) + reverseString(str.substring(0,str.length()-1));
        return reverse;
    }
}

public static void main(String a[]) {
    System.out.println(reverseString("Test"));
}

5 个答案:

答案 0 :(得分:2)

该行确实执行,你怎么能说它不执行。我添加了syso语句,它确实打印了,实际上你在递归中调用substring,一旦长度变为1,它就会执行。

public static String reverseString(String str) {
        String reverse = "";
        if (str.length() == 1) {
            System.out.println("hi");
            return str; // at one point this condition will be true, but value never returns
        } else {
            reverse += str.charAt(str.length() - 1) + reverseString(str.substring(0, str.length() - 1));
            return reverse;
        }
    }

    public static void main(String a[]) {
        System.out.println(reverseString("Test"));
    }

<强>输出

hi
tseT

答案 1 :(得分:1)

您可以轻松使用StringBuilder#reverse方法

public String reverser(String str){
   return new StringBuilder(str).reverse().toString();
}

答案 2 :(得分:0)

public static String reverseString(String str) {
    String reverse = "";
    if (str.length() == 1) {
        return str; // at one point this condition will be true, but value
                    // never returns
    } else {
        String part = reverseString(str.substring(0, str.length() - 1));
        System.out.println("Current: " + part); // Print out
        reverse = str.charAt(str.length() - 1)
                + part;
        return reverse;
    }
}

public static void main(String a[]) {
    System.out.println(reverseString("Test"));
}

只需在递归函数中添加一个打印件,即可追踪正在发生的事情。

<强>输出:

Current: T      // return str
Current: eT     // return reverse
Current: seT    // return reverse
tseT            // final return reverse

从输出中,您可以说服自己是否正在返回str。

答案 3 :(得分:0)

我的实施:

    public static String reverse(String str) {
        if(str.length() > 1) {
            return str.substring(str.length()-1)+reverse(str.substring(0, str.length()-1));
        } else {
            return str;
        }
    }

    public static void main(String[] args) {
        System.out.println(reverse("Test"));
    }

输出:

tseT

答案 4 :(得分:0)

实际上它命中并执行,检查出来;

public static String reverseString(String str){
    String reverse="";
    if(str.length() == 1 ){
        System.out.println("HIT: " + str);  // CHECKING HIT
        return str; //at one point this condition will be true, but value never returns
    } else {
        reverse += str.charAt(str.length()-1) + reverseString(str.substring(0,str.length()-1));
        return reverse;
    }
}

public static void main(String a[]) {
    System.out.println(reverseString("Abcd"));
}

如果您运行此代码,您将看到如下输出;

HIT: A
dcbA

要了解此代码的工作方式,您必须了解反向方法如何调用自身并完成其过程;

检查下面的图像;

enter image description here

如您所见,在第3步,因为递归函数的输入字符串长度等于1,所以执行该部分代码。

希望所有这些都有所帮助。