2015-09-27 54 views
2
L=[] 

def Prime(N): 
    a=0 
    for i in range(2,N): 
     if N%i==0: 
      a+=1 
     if a>0: 
      return False 
     else: 
      return True 

def PrimesList(N): 
    if N==2: 
     L.append(2) 
    elif Prime(N): 
     L.append(N) 
     return PrimesList(N-1) 
    else: 
     return PrimesList(N-1) 

L.reverse() 
print L 

如果我使用它一次,它會給出正確的答案。但L正在全球環境中得到拯救。使用遞歸時,如何將其放入循環內?這個問題對於大多數人來說可能是基本的,但我對Python很陌生。我應該打印的素數,直到N.使用遞歸打印素數直到N

+0

寫入的代碼不會運行 - 例如,第5行上的a = 0需要縮進。 –

+0

爲什麼你想要使用遞歸?只需使用一個簡單的循環。順便說一句,你的'Prime'功能可以變得更加高效。由於縮進錯誤,很難確切地知道你想要做什麼,但是1)只需要測試,直到找到n的第一個因子; 2)如果n不是素數,那麼它必須有一個因子<= sqrt(n)。 –

+0

另外,請修復您的縮進。通常的Python約定是對每個縮進級別使用4個空格。 –

回答

1

我會做它作爲第二個參數,使用None避免this common issue

def PrimesList(N, L=None): 
    if L is None: 
     L = [] 
    ... 

然後就包括L在遞歸調用,並確保你return L從他的遞歸結束。

0

要打印第一個N素數,您可以打印第一個質數並添加下一個素數。然而,爲了計算下一個素數的名單也很有所以除了打印它只是返回列表:

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 

請注意,這是不是與Python的最好的辦法,深遞歸是不是很有效,尾調用優化沒有在參考實現CPython中實現。