如何使用递归反转字符串?
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
是要反转的字符串的变量名。
【讨论】:
这似乎更像是评论而不是答案本身。以上是关于如何使用递归反转字符串?的主要内容,如果未能解决你的问题,请参考以下文章