我正在做一个关于生成素数的生成器的练习。
尽管我已经找到了解决这个问题的办法。我想知道我是否不知道或不想使用for/else循环。我怎样才能只使用for循环。
def genPrimes():
primes = [] # primes generated so far
last = 1 # last number tried
while True:
last += 1
for p in primes:
if last % p == 0:
break
else:
primes.append(last)
yield last
如果需要,可以使用递归函数:
def prime_number(n, d):
if n//2 < d:
return True
if n%d == 0:
return False
return prime_number(n, d+1)
def find_primes(n,i, result):
if i == n + 1:
return result
if prime_number(i, 2):
result.append(i)
return find_primes(n, i+1, result)
print(find_primes(100,2, []))
这里使用循环更好,因为它更简单,可以避免堆栈溢出;(