簡體   English   中英

為什么python中遞歸function會出現Memory錯誤?

[英]Why is there Memory Error in recursion function in python?

我編寫了一個代碼來使用 python 中的遞歸來獲取字符串的所有子序列。 下面是代碼。

def solve(s):

    if (len(s)==0):
        return [""]
    curr = s[0]
    res = s[1:]
    ans = solve(res)
    for i in ans:
        ans.append(curr+i)
    return ans
if __name__=="__main__":
    s=str(input())
    print(solve(s))

對於 input = "ab",上面的代碼拋出Memory 錯誤

我不確定為什么會這樣。

在將代碼更改為以下代碼時,它可以工作。

def solve(s):

    if (len(s)==0):
        return [""]
    curr = s[0]
    res = s[1:]
    ans = solve(res)
    new = []
    for i in ans:
        new.append(i)
        new.append(curr+i)

    return new

if __name__=="__main__":
    s=str(input())
    print(solve(s))

有人可以解釋第一個代碼中Memory 錯誤背后的原因是什么嗎? 提前致謝。

這個:

for i in ans:
    ans.append(curr+i)

您正在遍歷ans並同時將內容添加到ans的末尾。 這是一個無限循環:你永遠不會到達ans的盡頭,因為你不斷地讓它變長(直到你的內存用完)。

如果您想向ans添加新元素,這些新元素是curr前面的每個現有元素,您可以使用列表推導來做到這一點:

ans += [curr + i for i in ans]

這種方式計算所有新元素,然后將它們全部添加到ans中,而不是擴展ans

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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