Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中使用递归的素数和_Python_Recursion - Fatal编程技术网

Python中使用递归的素数和

Python中使用递归的素数和,python,recursion,Python,Recursion,给出的问题是确定两个数m和n是否为素数,如果是,则给出从m到n的所有素数之和。我已经为第一部分编写了代码: def isPrime(n, i): if n <= i: return True if (n == 2) else False if n % i == 0: return False if i * i > n: return True return isPrime(n, i + 1) 我不知道如

给出的问题是确定两个数m和n是否为素数,如果是,则给出从m到n的所有素数之和。我已经为第一部分编写了代码:

def isPrime(n, i):
    if n <= i:
        return True if (n == 2) else False
    if n % i == 0:
        return False
    if i * i > n:
        return True
    return isPrime(n, i + 1)

我不知道如何知道从m到n的所有素数。另外,我们只允许对这个问题使用递归。

我想你的教授希望你只测试
m
n
之间的所有数字的素性,然后将那些通过的数相加

defsumofprime(m,n):
如果isPrime(m,2)和isPrime(n,2):
返回和(i表示i在范围(m,n+1)内,如果是i,2))

这是一个完全递归的版本:

def sumOfPrime(m,n):
    if isPrime(n,2) and isPrime(m,2):
        return sumOfPrimes(m,n)

def sumOfPrimes(m, n):
    if m > n:
        return 0
    return (m if isPrime(m,2) else 0) + sumOfPrimes(m+1,n)
如果只有一个函数,最好使用嵌套函数:

def sumOfPrime(m,n):
    def helper(m,n):
        if m > n:
            return 0
        return (m if isPrime(m,2) else 0) + sumOfPrimes(m+1,n)

    if isPrime(n,2) and isPrime(m,2):
        return helper(m,n)


assert sumOfPrime(2,5) == 2 +3 + 5

递归调用
sumofprome
,在每一步增加
m
,直到
m==n
,同时保持一个运行总数。
如果(n==2)返回Trueelse False
可以简化为
返回n==2
,因为比较的结果就是返回的结果,返回答案比打印答案更好。好的,这很有效!非常感谢你!另外,你能分享一些关于理解递归问题的技巧吗?我对这个概念还不太熟悉,所以我对它还没有很强的理解。“要理解递归,你必须先理解递归。”笑话放在一边,如果你理解归纳的概念可能是最好的。另外,您的
isPrime
代码可以(应该)迭代完成,但我想您的教授希望您以这种方式学习递归。@ChristianSloper据此进行了编辑。谢谢!然而,这要求我们在这一部分中只使用函数,那么我如何正确地将代码压缩成一个函数呢?我试着压缩它,但函数没有起到同样的作用。@biyaya更新为使用嵌套函数
def sumOfPrime(m,n):
    def helper(m,n):
        if m > n:
            return 0
        return (m if isPrime(m,2) else 0) + sumOfPrimes(m+1,n)

    if isPrime(n,2) and isPrime(m,2):
        return helper(m,n)


assert sumOfPrime(2,5) == 2 +3 + 5