递归不会起作用

时间:2017-08-17 01:13:55

标签: java recursion

我正在练习递归(至少这是我认为我试图做的)。我的期望是代码打印出来" 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);
    }
}

2 个答案:

答案 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