[英]Recursion Won't Work
我正在练习递归(至少这是我想做的事情)。 我的期望是该代码可以打印11次“ dlrow olleh”,但只会打印一次。 原因?
import java.lang.StringBuilder;
public class Practice {
public static void main(String[] args){
String str = "hello world";
int count = new StringBuilder(str).length();
System.out.print(backwards(str, count));
}
public static String backwards(String word, int letters){
while(letters>0){
return new StringBuilder(word).reverse().toString();
}
return backwards(word,letters-1);
}
}
您的基本情况似乎首先触发,而不是最后触发。 如您所见,如果我向后调用(“ Hello world”,11),则由于字母> 0,它将返回新的StringBuilder(word).reverse.toString()
。
我认为您打算将两者切换。
所以基本上您没有在修改letters变量,所以while不会结束。
但是return是一个中断while语句的语句。
回归方法将是这样的
public static void main(String[ ] args) {
String str = "hello world";
int count = new StringBuilder(str).length();
System.out.print(backwards(str, count - 1, new StringBuilder()));
}
public static String backwards(String word, int letters, StringBuilder sb){
if (letters >= 0) {
sb.append(word.charAt(letters));
return backwards(word, letters - 1, sb);
} else {
return sb.toString();
}
}
请注意,我使用的是count-1和字母> = 0,因为索引从0变为size-1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.