为此,您只需提取最后一个数字,检查它是否是素数并继续其余的。
编写递归基本上由一个平凡的案例和一个递归组成,您将问题分解成一个较小的问题,直到您遇到一个平凡的案例。
因此,您需要做的是,找到不需要进一步递归的琐碎案例,然后考虑如何实现这一目标:
#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
琐碎的部分只是一个数字,因此非琐碎的部分是这样的,我们进入递归:
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))