Python有一个最大递归深度,但没有最大迭代深度。为什么要限制递归?把递归看做迭代并不会更自然吗?而且不会限制递归调用次数。
让我简单地说一下,这个问题的根源来自于试图实现流(参见此问题了解更多关于流的细节)。例如,假设我们想编写一个流以产生自然数:
def stream_accum(s, n): # force the stream to a list of length n
def loop(s, acc):
if len(acc) == n:
return acc
hd, tl = s()
return loop(tl, acc + [hd])
return loop(s, [])
def nats():
def loop(n):
return n, lambda: loop(n+1)
return loop(1)
流的递归定义非常吸引人。然而,我认为更好/更符合Python风格的方法是使用生成器。