递归减少

时间:2019-03-13 00:01:06

标签: python recursion

我目前正在从事一项学校作业,以使用递归生成前25个素数。当我编写的程序生成质数时,第23个数字之后会发生错误。

RecursionError: maximum recursion depth exceeded in comparison

我通过扩展自己计算机上的递归深度来解决此问题,但是我意识到并非每个人都会做同样的事情。我已经确定,我将缩短程序中运行的递归次数。我对此有疑问,想寻求帮助。

首先。

def checkPrime(a, n, c):

其中a是除数,n是可能的质数,c是迭代。

if c <= 24:
 if n % a <= 0:
  if n == a:
    print(n, end = ' ')
    return checkPrime(2, n + 1, c + 1)
  return checkPrime(2, n + 1, c)
return checkPrime(a + 1, n, c)

它基本上检查迭代,n是否可被a整除,以及n是否等于a。如果n不能被a整除,则重复加一。如果n不等于a,则使用下一个可能的质数递归,并将除数重置为2。如果一切都为True,则打印质数并使用下一个可能的质数递归,将除数重置为2,然后向计数器加1。

我这样调用函数:

checkPrime(2, 2, 0)

两个是起始除数和可能的质数,0是迭代。

我想做的是能够摆脱递归之一。我不想被告知需要使用的确切行代码。如果您只是指出正确的方向,我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您被允许使用anyall,那么关键的测试就是看您是否有候选数的有效除数:

limit = ceil(sqrt(cand+1))
if not any([cand % divisor == 0 for divisor in range(2, limit)]):
    # This is a prime

你能从那里拿走吗?