[英]why does reverse(string[0:]) shows error in python , why can't i use this instead of reverse(string[1:]) + string[0]
請解釋一下,我無法理解我已經嘗試過代碼:
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
每個遞歸調用只是重復前一個調用:您並沒有將任務減少到更小的東西。 因此,你有一個無限遞歸。
考慮反轉字符串“abc”。 在有效的形式中,您的遞歸步驟是
return reverse("bc") + 'a'
這將任務從 3 個字符的字符串減少到 2 個字符的字符串。 下一個遞歸將是
return reverse("c") + b
...當與父調用結合時,最終將返回“cba”。
失敗的版本有一個遞歸步驟
return reverse("abc")
簡而言之,它使用完全相同的輸入調用自己。 因此,您在每次調用時都會得到相同(缺乏)的處理。 輸入字符串永遠不會達到基本情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.