gpt4 book ai didi

python - 减少一个递归

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:37 24 4
gpt4 key购买 nike

我目前正在完成一项学校作业,使用递归生成前 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com