2013-03-03 13 views
-2

如果所有數字都是素數,則必須編寫一個Python遞歸函數,該函數將整數作爲參數並返回True 。 如編寫一個遞歸函數,如果所有數字都是素數,則返回「True」

allPrime(976) 
     False 
    allPrime(357) 
     True 

這是我迄今所做

def allPrime(n): 
    h=str(n) 
    for i in range(len(h)): 
     if h[i] == isPrime(h): 
      return True 
     else: 
      return False 
+3

拜託,竟然沒有一個在這裏的問題。如果你想讓人們做你的功課,至少要有創意。 – 2013-03-03 17:10:03

+0

你堅持什麼方面的任務? – christopher 2013-03-03 17:11:23

+2

你不必將它轉換爲字符串... 你可以用模和除10來做到這一點。 也,你的函數不遞歸 – cIph3r 2013-03-03 17:15:02

回答

0
def allPrime(n): 
    if n==0: 
     return(True) 
    elif (n%10) in [2,3,5,7]: 
     return(allPrime(n//10)) 
    else: 
     return(False) 
0

要做到這一點,你只需要提取最後一個數字,檢查如果它是一個主要的,並繼續其餘的。

寫入遞歸基本上由一個簡單的情況和遞歸組成,在這裏你將問題分解成一個較小的情況,直到你處於一個微不足道的情況。

所以,你需要做的是,找到你的瑣碎情況下,如果不需要進一步遞歸,並思考如何實現這一點:

#separate the number (123) into a last Digit (3) and the rest (12) 
lastDigit = n % 10 
rest = int(n/10) 

如果我們有一個無貸,我們可以返回False,而不是進一步goint成遞歸:

if not isPrime(lastDigit): 
    return False 

瑣碎的部分只是一個數字,因此不平凡的部分是,我們進入遞歸:

if n > 10: 
    return allPrime(rest) 

所以我們有這種情況,因爲非素數而停止,我們有非平凡的情況 平凡的情況也不會進入遞歸,並且因爲我們已經有了非情況的情況-prime,我們只需要:

return True 

概括:

def isPrime(n): 
    if n < 2: return False 
    if n == 2: return True 
    if n & 1 == 0: return False 
    for x in range(3, int(n ** 0.5)+1, 2): 
     if n % x == 0: 
      return False 
    return True 


def allPrime(n): 

    lastDigit = n % 10 
    rest = int(n/10) 
    if not isPrime(lastDigit): 
     return False 
    if n > 10: 
     return allPrime(rest) 

    return True 



print(allPrime(9777)) 
print(allPrime(773)) 
相關問題