# 有点意思的 Java 递归调用

**URL:** <https://www.isharkfly.com/t/java/14584>\
**Category:** 职友\
**Tags:** java, oa\
**Created:** [August 31, 2023, 7:05pm UTC](https://www.isharkfly.com/t/java/14584 "2023-08-31T19:05:47Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 31, 2023, 7:05pm UTC](https://www.isharkfly.com/t/java/14584/1 "2023-08-31T19:05:47Z")

</div>

最近在刷一些问题的时候看到有下面一个问题

![2023-08-31_00-04-56](https://www.isharkfly.com/images/transparent.png)

上面问的是当输入的字符串为什么的时候返回 True

## 总结

在做题目的时候，第一次还做错了。

这是因为解答这个题目的时间只有 3 分钟，没有自己看题目

后来拿着程序跑了下。

```auto
    public void testGetPut() throws Exception {

        String text = "abcdef";
        System.out.println(text.equals(alertText(text)));
    }

    private String alertText(String inputText) {
        if (StringUtils.isBlank(inputText))
            return inputText;

        return inputText.charAt(inputText.length() - 1) + alertText(inputText.substring(0, inputText.length() - 1));
    }

```

上面代码的运行结果如下：

![2023-08-31_14-59-30](https://www.isharkfly.com/images/transparent.png)

如果仔细看这个问题就可以发现在子函数里面有一个递归调用。

这个可能是会比较困惑的地方。

这行代码 `inputText.charAt(inputText.length() - 1)` 将会返回你输入字符串的最后一个字符。

然后在使用 `+` 这个是 String 的字符串连接计算。

随后再递归调用了这个方法，可以看到递归调用输入的字符串为为上次使用的字符串，去掉最后一个字符的字符串。

然后在递归调用方法中又取得了最后一个字符。

通过上面的算法，我们会知道需要满足返回为 TRUE 的情况。

只有一种可能就是字符串应该需要对称排列。

所以答案应该是 ：ab1221ba

只要满足对称排列就可以了，所以如果你输入：abc123321cba 这个也会返回 TRUE。

我说的对称是输入字符串从中间拆开，左右对称。

很遗憾的是，在这个题目的选择时候，我选错了。
