Python 使用递归打印素数直到N
如果我用它一次,它会给出正确的答案。但我在全球环境中被拯救了。在使用递归时,如何将其引入循环中?对于大多数人来说,这个问题可能是最基本的,但我对Python还是新手。我应该打印素数直到N。我会将其作为第二个参数,使用Python 使用递归打印素数直到N,python,Python,如果我用它一次,它会给出正确的答案。但我在全球环境中被拯救了。在使用递归时,如何将其引入循环中?对于大多数人来说,这个问题可能是最基本的,但我对Python还是新手。我应该打印素数直到N。我会将其作为第二个参数,使用None来避免: 然后只需在递归调用中包含L,并确保在递归结束时返回L 要打印第一个N素数,只需打印第一个N-1素数并添加下一个素数即可。但是,要计算下一个素数,数字列表也很有用,因此除了打印外,只需返回列表: def PrimesList(N, L=None): if L
None
来避免:
然后只需在递归调用中包含
L
,并确保在递归结束时返回L
要打印第一个N
素数,只需打印第一个N-1
素数并添加下一个素数即可。但是,要计算下一个素数,数字列表也很有用,因此除了打印外,只需返回列表:
def PrimesList(N, L=None):
if L is None:
L = []
...
请注意,这不是Python的最佳方法,深度递归不是很有效,并且尾部调用优化没有在参考实现CPython中实现。您编写的代码不会运行——例如,第5行的a=0需要缩进。为什么要使用递归?只需使用一个简单的循环。顺便说一句,您的
Prime
功能可以更加高效。由于缩进误差,很难确切地知道您要做什么,但是1)它只需要测试,直到找到第一个因子n;2)如果数字n不是素数,那么它也必须有一个因子,请修正缩进。通常的Python约定是每个缩进级别使用4个空格。
def PrimesList(N, L=None):
if L is None:
L = []
...
def printFirstPrimes(N):
if N == 1:
result = [2]
else:
result = printFirstPrimes(N-1)
# ... compute next prime here ...
result.append(next_prime)
print result
return result