【发布时间】:2015-01-08 12:25:06
【问题描述】:
Python 有最大递归深度,但没有最大迭代深度。为什么递归受限?像迭代一样对待递归,不限制递归调用的次数不是更自然吗?
我只想说这个问题的根源来自尝试实现流(有关流的更多详细信息,请参阅this question)。例如,假设我们要编写一个流来生成自然数:
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 的方法是使用生成器。
【问题讨论】:
-
“吸引人”的递归解决方案有许多不吸引人的方面。首先,它具有 O(n**2) 行为,因为您不断构建新列表来扩展它们。其次,它过于复杂,因为您可以简单地迭代以产生自然数。这是一个编写 Python 的示例,就好像它是 Scheme 或 Haskell。不同的语言擅长不同的事情。使用迭代。