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