これを行うには、最後の桁を抽出し、それが素数であるかどうかを確認して、残りを続行する必要があります。
再帰の記述は、基本的には些細なケースと再帰で構成され、些細なケースになるまで問題をより小さな問題に分解します。
したがって、あなたがする必要があるのは、それ以上の再帰が必要とされないあなたの些細なケースを見つけて、これを達成する方法を考えることです:
#separate the number (123) into a last Digit (3) and the rest (12)
lastDigit = n % 10
rest = int(n / 10)
素数がない場合は、Falseを返すことができ、再帰に進むことはできません。
if not isPrime(lastDigit):
return False
些細な部分は1桁しかないため、重要な部分はこれです。ここで再帰に入ります。
if n > 10:
return allPrime(rest)
つまり、プライムがないために停止する場合があります。自明でない場合もあります。自明な場合も再帰になりません。また、プライムがない場合はすでにあるため、ちょうど求めている:
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))