【问题标题】: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 ""

标签: python string python-2.7 recursion


【解决方案1】:

问题来了,

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

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

应该是的

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这似乎更像是评论而不是答案本身。
    猜你喜欢
    • 2017-07-20
    • 2013-04-13
    • 2019-08-09
    • 2011-07-28
    • 2015-09-27
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多