繁体   English   中英

递归将不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM