要做到這一點,你只需要提取最後一個數字,檢查如果它是一個主要的,並繼續其餘的。
寫入遞歸基本上由一個簡單的情況和遞歸組成,在這裏你將問題分解成一個較小的情況,直到你處於一個微不足道的情況。
所以,你需要做的是,找到你的瑣碎情況下,如果不需要進一步遞歸,並思考如何實現這一點:
#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))
拜託,竟然沒有一個在這裏的問題。如果你想讓人們做你的功課,至少要有創意。 – 2013-03-03 17:10:03
你堅持什麼方面的任務? – christopher 2013-03-03 17:11:23
你不必將它轉換爲字符串... 你可以用模和除10來做到這一點。 也,你的函數不遞歸 – cIph3r 2013-03-03 17:15:02