如何解决为什么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))
我不知道为什么会这样。
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))
谁能解释一下第一个代码中内存错误背后的原因是什么? 提前致谢。
解决方法
这个:
for i in ans:
ans.append(curr+i)
您正在遍历 ans
并同时将内容添加到 ans
的末尾。这是一个无限循环:您永远不会到达 ans
的末尾,因为您会不断延长它(直到内存耗尽)。
如果您想向 ans
添加新元素,这些新元素是每个以 curr
开头的现有元素,您可以使用列表推导来实现:
ans += [curr + i for i in ans]
这种方式计算所有的新元素,然后然后将它们全部添加到 ans
上,而不是继续扩展 ans
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。