如何使用递归反转字符串?

Posted

技术标签:

【中文标题】如何使用递归反转字符串?【英文标题】:How to reverse a string using recursion? 【发布时间】:2016-03-05 12:42:03 【问题描述】:

我正在尝试一个简单的程序,它可以让我打印出“计算机”的反向单词。当我运行我的代码时,我收到一个运行时错误 RuntimeError: maximum recursion depth exceeded in cmp

我可以知道发生了什么,我该如何解决?

def reverse(str1):
    if str1 == '':
        return str1
    else:
        return reverse(str1[1:] + str1[0])

print reverse('retupmoc')

【问题讨论】:

除了编程练习之外,我假设您知道这种反转字符串的方式:'retupmoc'[::-1] 也可以将代码缩减为return reverse(str1[1:]) + str1[0] if str1 else "" 【参考方案1】:

问题来了,

return reverse(str1[1:] + str1[0])

您将字符串的其余部分与第一个字符连接起来并传递给reverse 函数。所以,字符串的长度永远不会减少。

应该是的

return reverse(str1[1:]) + str1[0]

现在,您只将字符串的其余部分(不包括第一个字符)传递给递归 reverse 函数。因此,在每个递归级别上,都会从字符串中删除一个字符,它最终会满足您的基本条件。

【讨论】:

【参考方案2】:

在python中,你可以在一行中反转字符串,并且完全避免递归,除非它是一些有要求的赋值。

So do:s[::-1],其中s 是要反转的字符串的变量名。

【讨论】:

这似乎更像是评论而不是答案本身。

以上是关于如何使用递归反转字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中使用递归反转字符串

由字符串反转(使用递归)引申出来一道Java面试题

C++:使用递归反转字符串

在Java中递归反转字符串的最佳方法是啥?

递归:反转字符串

递归:反转字符串