簡體   English   中英

為什么 reverse(string[0:]) 在 python 中顯示錯誤,為什么我不能用它代替 reverse(string[1:]) + string[0]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM