Python 使用递归打印素数直到N

Python 使用递归打印素数直到N,python,Python,如果我用它一次,它会给出正确的答案。但我在全球环境中被拯救了。在使用递归时,如何将其引入循环中?对于大多数人来说,这个问题可能是最基本的,但我对Python还是新手。我应该打印素数直到N。我会将其作为第二个参数,使用None来避免: 然后只需在递归调用中包含L,并确保在递归结束时返回L 要打印第一个N素数,只需打印第一个N-1素数并添加下一个素数即可。但是,要计算下一个素数,数字列表也很有用,因此除了打印外,只需返回列表: def PrimesList(N, L=None): if L

如果我用它一次,它会给出正确的答案。但我在全球环境中被拯救了。在使用递归时,如何将其引入循环中?对于大多数人来说,这个问题可能是最基本的,但我对Python还是新手。我应该打印素数直到N。

我会将其作为第二个参数,使用
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