python - 减少一个递归

标签 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。如果一切为真,它会打印素数并重复出现下一个可能的素数,将除数重置为 2,然后将 1 加到计数器.

我这样调用函数:

checkPrime(2, 2, 0)

2 是起始除数和可能的素数,0 是迭代。

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

最佳答案

如果您被允许anyall,那么您的关键测试是查看您是否有任何有效的候选数字除数:

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

你能从那里拿走它吗?

关于python - 减少一个递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132437/

相关文章:

Python 2.7 __init__() 恰好接受 2 个参数(给定 3 个)

python - 如何裁剪到 OpenCV 中最大的内部边界框?

java - 将 Jython PythonInterpreter 中的参数添加到 "execfile"函数

python - python中的函数如何调用同一个类中的另一个函数

python - 在字典理解中临时分配变量的优雅方式?

android - android中迷宫生成的递归划分算法

django - 使用 celery 更新 Django 模型字段时避免递归 save()

java - 解析字符串的递归方法

c++ - 共享指针会破坏尾调用优化吗?

swift - 使用swift递归列出文件夹中的所有文件