社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

为什么reverse(string[0:])在python中显示错误,为什么我不能使用它而不是reverse(string[1:])+string[0]

samiksha warang • 6 年前 • 1721 次点击  

请解释一下,我听不懂

def reverse(string):
        if len(string) == 0:
            return string
        else:
            return reverse(string[0:])
st = str(input("Enter the string to be reversed: "))
print(reverse(st))

以上代码给出的错误如下:

Enter the string to be reversed: samiksha
Traceback (most recent call last):
  File "C:\Users\samiksha warang\Desktop\python\lab exps\exp3.py", line 40, in <module>
    print(reverse(st))
  File "C:\Users\samiksha warang\Desktop\python\lab exps\exp3.py", line 38, in reverse
    return reverse(string[0:])
  File "C:\Users\samiksha warang\Desktop\python\lab exps\exp3.py", line 38, in reverse
    return reverse(string[0:])
  File "C:\Users\samiksha warang\Desktop\python\lab exps\exp3.py", line 38, in reverse
    return reverse(string[0:])
  [Previous line repeated 1021 more times]
  File "C:\Users\samiksha warang\Desktop\python\lab exps\exp3.py", line 35, in reverse
    if len(string) == 0:
RecursionError: maximum recursion depth exceeded while calling a Python object
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56443
文章 [ 1 ]  |  最新文章 6 年前
Prune
Reply   •   1 楼
Prune    6 年前

每一个递归调用只会重复上一个调用:您不会将任务减少到更小的任务。因此,你有一个无限递归。

考虑反转字符串“abc”。在有效的形式中,递归步骤是

return reverse("bc") + 'a'

这将任务从3个字符的字符串减少到2个字符的字符串。下一个递归将是

return reverse("c") + b

... 当与父调用结合时,最终将返回“cba”。


失败版本的递归步骤为

return reverse("abc")

简言之,它称自己为 确切地