【发布时间】:2021-05-31 10:05:50
【问题描述】:
我编写了一个代码来使用 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",上面的代码抛出内存错误
我不知道为什么会这样。
将代码更改为以下代码后,它可以工作。
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))
谁能解释一下第一个代码中内存错误背后的原因是什么? 提前致谢。
【问题讨论】:
-
您正在遍历
ans并同时在ans的末尾添加内容。这是一个无限循环(直到ans变得如此之长以至于您的内存不足)。
标签: python recursion memory memory-management subsequence