python - 素数递归 - 它是如何工作的? (Python)

标签 python function recursion primes primality-test

我想知道这个程序如何知道一个数字是否是质数。我知道它会检查余数以找到要除以的偶数,但它如何知道一个数字只有 2 个因数?我对递归的概念很陌生,因此对步骤的解释会很有帮助,谢谢。

代码

def RecIsPrime(m):
    """Uses recursion to check if m is prime."""
    def PrimeHelper(m, j):
        """Helper Function to iterate through all j less than m up to 1 to look for even divisors."""
        if j == 1:  # Assume 1 is a prime number even though it's debatable.
            return True
        else:
            #do this task if both conditionals are true
            #else break and return false.
            return m % j != 0 and PrimeHelper(m, j - 1)
    return PrimeHelper(m, m -1)

来源

https://github.com/hydrogeologist/LearningPython/blob/master/_recursion%20example%20in%20Python

行数:184 到 194

最佳答案

它检查是否有从 m - 1 到 1 的任何数字可以整除 m,它不仅仅检查偶数。

EG,对于RecIsPrime(10),您将调用以下嵌套函数:

PrimeHelper(10, 9) = 10 % 9 != 0 and PrimeHelper(10, 8)
↪ PrimeHelper(10, 8) = 10 % 8 != 0 and PrimeHelper(10, 7)
  ↪ PrimeHelper(10, 7) = 10 % 7 != 0 and PrimeHelper(10, 6)
    ↪ PrimeHelper(10, 6) = 10 % 6 != 0 and PrimeHelper(10, 5)
      ↪ PrimeHelper(10, 5) = 10 % 5 != 0 == false

10 % 5 != 0false,因此不会评估 and 的右侧。 PrimeHelper(10, 5) 将返回 false 并且不会继续递归。
PrimeHelper(10, 6) 中,您得到 10 % 6 != 0true,但我们刚刚看到了 PrimeHelper (10, 5)false 因此这也将返回 false,所有其他调用也将返回 false。

关于python - 素数递归 - 它是如何工作的? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40438824/

相关文章:

python - 如何告诉 Twisted http 服务器忽略索引文件

recursion - 第 i 个和第 i+1 个元素循环的惯用 clojure

python - Numpy 数组 : multi conditional assignment

python - 使用正则表达式从目录中解析文本

Python:将大文件下载到本地路径并设置自定义 http header

perl 如何在模块动态导入时访问 func

PHP:以等号作为参数的函数?

javascript - JS函数 "Object expected At line 2 character 0"

python - 如何创建一个函数(迭代/递归)来运行 Python 中的元组字典?

php - 使用正则表达式匹配嵌套模式(使用 PHP 的递归)