0

我从电脑发烧友那里看到了这个关于惰性计算的精彩视频。在视频中,他们展示了一段非常漂亮的 Python 代码,它将使用筛法“懒惰”地计算素数

def nats(n):
    yield n
    yield from nats(n+1)
def sieve(s): 
    n = next(s)
    yield n
    yield from sieve(i for i in s if i%n!=0)

当您实际实现代码来计算大量素数时,问题就出现了。因为您是递归搜索,所以相对较快地达到递归深度。我只能计算一个素数2281

如果我修改代码以摆脱第一个函数的递归:

def nats(n):
    while True:
        yield n
        n += 1

然后我可以12379在达到递归深度之前进行质数。

如果我正确理解代码,您需要递归以继续仅将主要候选数字(通过筛法)输入到sieve函数中。

有没有办法实现这种“惰性计算”算法来进行惰性计算而不使用递归,从而无限地计算素数而不会遇到递归限制障碍?

4

0 回答 0