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

4

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

请问发生了什么问题,如何解决?

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

print reverse('retupmoc')

2
除了作为编程练习之外,我认为你已经知道这种反转字符串的方法:'retupmoc'[::-1] - Alex
1
你也可以将代码简化为 return reverse(str1[1:]) + str1[0] if str1 else "" - Padraic Cunningham
2个回答

7
问题出在这里,
return reverse(str1[1:] + str1[0])

您正在将字符串的其余部分与第一个字符连接起来,并将其传递给reverse函数。因此,字符串的长度从未减少。
应该是这样的:
return reverse(str1[1:]) + str1[0]

现在,你只是将剩余的字符串传递到递归的reverse函数中,不包括第一个字符。因此,在每个递归级别上,将从字符串中移除一个字符,并最终满足您的基本条件。


1
在Python中,您可以用一行简单的代码反转字符串,并且完全避免递归,除非它是某个要求的赋值问题。因此,请使用s[::-1],其中s是要反转的字符串的变量名。

这似乎更像是一条评论,而不是一个答案本身。 - Alok Mysore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接