无法理解递归字符串

时间:2018-03-20 12:44:09

标签: java recursion

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”段中的第一行会发生什么。如果有人可以提供帮助,请做。

2 个答案:

答案 0 :(得分:1)

条件if (nL>=3)表示只要输入String的长度至少为3,就会执行递归调用。

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

对于输入" abcdefgjijkl",其长度为12,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

答案 1 :(得分:0)

第一个递归函数将在条件满足时递归执行,一旦递归结束,并且回溯System.out.println(xxx)将会发挥作用,递归将再次启动该字符串。