Java字符串递归



我正在尝试学习Java,现在我正在尝试算法。所以,我被递归卡住了。我有一个代码我不懂。

public static String reverseString(String text){

// base case

if (text.length() == 0) {
return text;
} 
else {
// recursive call
return reverseString(text.substring(1)) + text.charAt(0);
}
}

public static void main(String[] args) {
String str = new String("howdy");
// calling recursive function
String reverse = reverseString(str);
System.out.println(reverse); // Prints: ydwoh
}

问题是,对我来说递归调用在这个代码中对我来说是:

它第一次重新运行owdyh

第二次wdyo等等。

我不明白字符串ydwoh是如何产生的。我怀疑某个地方按照正确的顺序进行了协调,并存储在某个地方,但我也不知道这个地方在哪里。

更新

我用纸试了一下,得到的是:

第一个递归调用:

返回值owdyh=";owdy"+"h〃;

第二次呼叫:

返回值wdyo=";wdy"+"o";

等等

困难在于在调用后处理。第一个字母被添加到其余的reverseString的结果的末尾

reverseString "howdy"
reverseString "owdy"
reverseString "wdy"
reverseString "dy"
reverseString "y"
reverseString ""
return ""
return "" + "y"
returns "y" + "d"
returns "yd" + "w"
returns "ydw" + "o"
returns "ydwo" + "h"
returns "ydwoh"

这就像是一个归纳的数学证明:

  • 空字符串被反转(结果为空字符串(
  • 当递归调用在较小的字符串上工作时,将第一个字符放在末尾,也会反转字符串
  • 所以reverseString适用于所有长度的字符串

感谢您的回答!他们帮我弄清楚了我的误解!我无法理解的是text.charAt(0)中的所有字符都存储在哪里!诀窍是,它们存储在堆栈中,没有任何链接。这是LIFO(后进先出(的工作方法。

最新更新