public void mystery7(String sWord){
    int nL=sWord.length();
    if (nL>=3) {
        mystery7(sWord.substring(0,nL/3));
        System.out.println(sWord.substring(0,nL/3));
        mystery7(sWord.substring(0,nL/3));
    }
}


我在递归方面遇到麻烦。我必须找到mystery7(“ abcdefgjijkl”)的输入,但是我不明白“ if”段中的第一行会发生什么。如果有人可以帮助,请这样做。

最佳答案

条件if (nL>=3)表示仅在输入String的长度至少为3时执行递归调用。


递归方法使用输入字符串sWord.substring(0,nL/3)的前三分之一调用自身。
然后打印字符串的前三分之一。
最后,它使用输入String的前三分之一再次调用自身。


对于长度为12的输入“ abcdefgjijkl”,mystery7(“ abcdefgjijkl”)导致以下调用:

mystery7("abcdefgjijkl")
    mystery7("abcd");
        mystery7("a"); // does nothing
        System.out.println("a");
        mystery7("a"); // does nothing
    System.out.println("abcd");
    mystery7("abcd");
        mystery7("a"); // does nothing
        System.out.println("a");
        mystery7("a"); // does nothing


因此输出是

a
abcd
a

09-11 18:38