-2

我必须编写一个 Python 递归函数,它接受一个整数作为参数,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
4

2 回答 2

0

为此,您只需提取最后一个数字,检查它是否是素数并继续其余的。

编写递归基本上由一个平凡的案例和一个递归组成,您将问题分解成一个较小的问题,直到您遇到一个平凡的案例。

因此,您需要做的是,找到不需要进一步递归的琐碎案例,然后考虑如何实现这一目标:

#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))
于 2013-03-03T17:28:47.630 回答
0
def allPrime(n):
    if n==0:
        return(True)
    elif (n%10) in [2,3,5,7]:
        return(allPrime(n//10))
    else:
        return(False)
于 2013-03-03T17:25:24.403 回答