gpt4 book ai didi

Python树遍历递归深度超出

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:06:43 24 4
gpt4 key购买 nike

我有一个线段树,它保存一系列数字的数据(选择的数据结构 here )。这是代码:

class SegmentTree:
def __init__(self, N):
def _init(b, e):
if b is e:
data = foo() # No dependency
return Node(b, e, data, None, None)
else:
mid = (b + e ) / 2

L = _init(b, mid)
R = _init(mid + 1, e)

data = foo() #Data depends on L and R

return Node(b, e, data, L, R)

self.root = _init(1, N)

N 大约 300 时失败,最大递归深度超出错误。有没有一种方法可以迭代而不是递归地创建树?

最佳答案

真正的问题不是你的算法的递归深度,对于像 300 这样的值,它应该是大约 10,而是你将数字与 is 进行比较。 is 关键字检查对象标识,而 == 检查是否相等:

>>> 300 == 299+1
True
>>> 300 is 299+1
False

因此,应该终止递归的 if 条件永远不会为真,函数将继续递归,即使 be 相等。

如果你改变 if 这个问题应该会消失:

if b == e:
...

对于小数字,问题可能不会发生,因为 Python "caches" and reuses the objects对于特定大小的整数。

关于Python树遍历递归深度超出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com