【发布时间】:2012-11-28 10:58:24
【问题描述】:
我在使用 itertools.count 函数时遇到了一些问题,我不太明白它的作用。我希望下面的代码能够完成Project Euler problem 2。
我知道我可以用一个简单的 while 循环来写这个,但是有没有办法用列表推导来做到这一点?这段代码只是冻结,因为我猜它会随着 count() 变得无穷大。我希望它会在 x > MAX 之后停止,但我知道这不会发生。有没有办法在下面的生成器表达式中停止计数?
def fib(n):
if (n <= 1): return 1
else: return fib(n-1) + fib(n-2)
MAX = 4000000
infiniteFib = (fib(x) for x in count())
s = (x for x in infiniteFib if x < MAX and x % 2 == 0)
print sum(s)
【问题讨论】:
-
不管怎样,这是一个非常低效的计算斐波那契值的函数。 30 多岁之后的任何东西都需要永远返回到我的机器上,而且它非常强大。
-
我已经记住了实际的函数,所以它不是 as 坏的。
标签: python count itertools infinite