首页 > 解决方案 > 调用堆栈反转字符串使用递归

问题描述

我很难理解反转字符串的调用堆栈使用以下代码:

public static String reverseString(String str) {
        String reverse = "";
        if (str.length() == 1) {

            return str; 
        } else {
            reverse += str.charAt(str.length() - 1) + reverseString(str.substring(0, str.length() - 1));
            return reverse;
        }
    }

您可以看到堆栈从 1 到 4 建立,然后从 4 到 1 弹出。以 str = "abcd" 为例。它应该首先返回“a”(因为“a”首先从调用堆栈弹出),它不会反转字符串。我这里有什么问题吗?谢谢!

在此处输入图像描述

标签: javarecursion

解决方案


仔细考虑代码中的以下块:

else {
        reverse += str.charAt(str.length() - 1) + reverseString(str.substring(0, str.length() - 1));
        return reverse;
    }

调用堆栈正在递归排除最后一个字符的函数,并将排除的字符附加到变量 reverse 中。您所缺少的理解是,首先调用堆栈返回最后一个排除字符,即“d”,而不是您提到的“a”,并将其附加到字符串“reverse”。

手动重复代码:
reverse input //reverseString(input)
1. d abcd
2. c abc
3. b ab
4. a a //return a as length is 1, if block

你可以看到反向字符串随着每个称呼。


推荐阅读