我正在练习递归(至少这是我认为我试图做的)。我的期望是代码打印出来" dlrow olleh" 11次,但它只打印一次。原因是什么?
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);
}
}
答案 0 :(得分:0)
你的基本案例似乎是先触发,而不是最后触发。正如您将看到的,如果我向后拨打电话(" Hello world",11),那么因为字母> 0,它将返回新的StringBuilder(word).reverse.toString()
。
我认为你打算转换两者。
答案 1 :(得分:0)
所以基本上你没有修改字母变量,所以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变为大小-1