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