Python中使用递归的素数和
给出的问题是确定两个数m和n是否为素数,如果是,则给出从m到n的所有素数之和。我已经为第一部分编写了代码: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) 我不知道如
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