【发布时间】:2019-12-17 20:39:18
【问题描述】:
我有这个代码:
def has_divisors(n, i=2):
"""
Check if a number is prime or not
:param n: Number to check
:param i: Increasing value that tries to divide
:return: True if prime, False if not
"""
if n <= 1:
return False
if i + 1 == n:
return True
if n <= 2 and n > 0:
return True
if n % i == 0:
return False
return has_divisors(n, i + 1)
判断一个数字是否为素数,问题是它可以检查一个数字是否在 +- 1500 以内为素数,然后进入最大递归深度误差。有谁知道如何使这段代码更高效(我不想要完全不同的代码,是的,我知道递归对于这个函数不是一个好主意,但我必须使用它) 谢谢!
【问题讨论】:
-
一种方法是to increase the max recursion depth。话虽如此,您应该真正删除递归并改用循环。
-
2之后,你不必检查任何偶数作为因数,也不必检查任何平方大于n的因数。
-
我无法增加最大递归深度
-
这对Code Review来说是一个更好的问题
-
How do I find a prime number using recursion in Python 第二个答案具有类似的功能,在达到最大递归深度之前可以达到 1M 而不是 1K。