【问题标题】:How to determine prime number using recursion with single parameter Python如何使用单参数 Python 递归确定素数
【发布时间】:2021-01-14 05:49:21
【问题描述】:

我正在尝试创建一个函数来确定一个数字是否为质数。但是,我只能在函数中使用一个参数。这是我到目前为止所拥有的,但我不确定如何执行递归部分以使其返回正确的值。

问题是“写一个递归函数“IsPrime(x)”来判断x(一个正整数)是否为素数。如果是素数,返回True;否则,返回False。基本思想是对于所有 x >= 3,如果 x 不能被任何小于或等于 sqrt(x) 的素数整除,则它是素数。同样,不要使用内置的 Python 函数。相反,写你自己的代码来实现它。”

def IsPrime(x):
    if x == 1:
        return False
    elif x == 2:
        return True
    else:
        return IsPrime(math.floor(math.sqrt(x)))

【问题讨论】:

  • 这是某种任务吗?我认为不可能在只有一个参数的单个递归函数中做到这一点(尽管我当然可能是错的)。
  • @RobinZigmond 是的。这就是为什么我很困惑。我试图确保 x 不能被任何小于或等于 sqrt(x) 的素数整除,但我不知道该怎么做。如果这可以帮助
  • 是什么让你认为递归在这里是合适的?知道一个较小的数是素数,知道当前数是素数有什么帮助?此外,您的代码中的任何地方都没有“均分”测试。
  • @trincot 我不知道,这是我被分配的任务,我只是想弄清楚如何做到这一点。我在代码中放入的递归部分肯定是不正确的,但我不知道递归部分应该是什么。
  • 你能编辑问题并逐字逐句地引用你的作业吗?

标签: python recursion


【解决方案1】:

这当然不是找到素数的最有效方法,但可以通过递归来完成,将您在问题中描述的“基本思想”转化为算法:

  • 如果 x >= 3,遍历从 2 到 sqrt(x) 的所有整数 i:
    • 检查 i 是否为素数(递归使用此函数)。
      • 如果是,检查 x 是否可以被 i 整除。
        • 如果是,则 x 不是素数(退出函数)。
        • 如果没有,请继续。
      • 如果没有,请继续。
  • 如果我们已经遍历了所有 i 并且函数仍在运行,则 x 不能被任何素数 i 整除,因此 x 是素数。
import math

def IsPrime(x):
    if x == 1:
        return False
    if x == 2:
        return True
    for i in range(2, math.floor(math.sqrt(x)) + 1):
        if IsPrime(i):
            if x % i == 0:
                return False
    return True

请注意,每当到达return 语句时,函数的执行就会终止。例如,这允许我们省略显式的 else 语句。

【讨论】:

  • 谢谢!这会奏效!我之前没想过使用 for 循环。
猜你喜欢
  • 2018-11-15
  • 2019-03-08
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多