Java递归反向字符串

Java递归反向字符串,java,recursion,Java,Recursion,嗨,我正在尝试理解下面的递归方法,但它似乎太混乱了。我知道reversePrint方法调用它self,但我的问题是,它第一次运行时应该打印bcdef+a=bcdef。这就是我感到困惑的地方,下次它运行b时变成了字符。。。那么a在哪里??它们是否暂时存放在某个地方?有人能帮我理解一下吗。非常感谢 public static void main(String[] args) { // TODO code application logic here System.out.printl

嗨,我正在尝试理解下面的递归方法,但它似乎太混乱了。我知道reversePrint方法调用它self,但我的问题是,它第一次运行时应该打印bcdef+a=bcdef。这就是我感到困惑的地方,下次它运行b时变成了字符。。。那么a在哪里??它们是否暂时存放在某个地方?有人能帮我理解一下吗。非常感谢

public static void main(String[] args) {
    // TODO code application logic here
    System.out.println(reversePrint("abcdef"));
}

public static String reversePrint(String s) {
    if (s.length() <= 1) {
        return s;
    }
    return reversePrint(s.substring(1)) + s.charAt(0);
}

让我们稍微看一下这个例子:

首先调用reversePrintabcdef。简而言之,我将把它写成revabcdef

在每一步中,我们都会在原始字符串的子字符串上评估rev。首先我们评估revabcdef。但为了解决这个问题,我们需要评估revbcdef,为此我们需要revcdef等等

我们一直计算到revf,也就是f。然后我们将一个字符串连接到下一个字符串,最后得到revabcdef=fedcba


我建议使用斐波那契序列观看。他在这方面做得很好。

这里首先是在第一个字符和剩余字符串之间分离一个字符串,然后重复这个过程,直到字符串的长度小于或等于1

abcdef 
  bcdef   a
   cdef   b
     def  c
       ef d
        f e
          f
再次终止编译器,然后生成最终结果

fedcba。。。
希望它是清楚的。

可能与您的公司进行重复。它将告诉您在调试模式下一步一步地运行它的所有操作。这将是说明性的。“a”在s.charAt0的第一个调用中。这样想吧。要反转字符串,请创建一个新字符串,其中第一个字符位于其余字符反转的末尾。诸如此类……关于你所困惑的临时变量,看看堆栈框架是如何工作的@user3545850没问题。如果你仍然有问题,一定要看一看。
abcdef 
  bcdef   a
   cdef   b
     def  c
       ef d
        f e
          f