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

时间:2015-12-01 14:39:16

标签: python string python-2.7 recursion

我正在尝试一个简单的程序,这个程序可以让我打印掉#34;计算机"的反向词。当我运行我的代码时,我收到运行时错误 RuntimeError:cmp 中超出了最大递归深度。

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

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

print reverse('retupmoc')

2 个答案:

答案 0 :(得分:7)

问题出在这里,

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

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

应该是

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

现在,您只传递字符串的其余部分,将第一个字符排除在递归reverse函数之外。因此,在每个递归级别,将从字符串中删除一个字符,它最终将满足您的基本条件。

答案 1 :(得分:1)

在python中,你可以在一个简单的行中反转字符串,并完全避免递归,除非它是一个带有需求的赋值。

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