有人可以解释为什么“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"));
}
答案 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
要了解此代码的工作方式,您必须了解反向方法如何调用自身并完成其过程;
检查下面的图像;
如您所见,在第3步,因为递归函数的输入字符串长度等于1,所以执行该部分代码。
希望所有这些都有所帮助。