Java递归函数如何巧妙地实现长尾递归?

2026-04-19 13:281阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计625个文字,预计阅读时间需要3分钟。

Java递归函数如何巧妙地实现长尾递归?

最近在刷一些问题的时候,发现一个问题+上面问的是输入的字符串为什么时候返回+True+总结+在做题目的时,第一次还做错了。这是因为解答这个问题的只给了3分钟时间,没“‘。

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

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

总结

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

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

后来拿着程序跑了下。

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)); }

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

Java递归函数如何巧妙地实现长尾递归?

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

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

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

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

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

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

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

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

所以答案应该是 :ab1221ba

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

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

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

www.ossez.com/t/java/14584

本文共计625个文字,预计阅读时间需要3分钟。

Java递归函数如何巧妙地实现长尾递归?

最近在刷一些问题的时候,发现一个问题+上面问的是输入的字符串为什么时候返回+True+总结+在做题目的时,第一次还做错了。这是因为解答这个问题的只给了3分钟时间,没“‘。

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

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

总结

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

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

后来拿着程序跑了下。

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)); }

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

Java递归函数如何巧妙地实现长尾递归?

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

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

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

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

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

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

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

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

所以答案应该是 :ab1221ba

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

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

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

www.ossez.com/t/java/14584