【发布时间】:2016-09-11 17:06:52
【问题描述】:
在我学校的计算机科学 2 课上,我们目前正在探索递归。我们已经使用递归来执行阶乘或斐波那契数列之类的事情,但被困在is_prime(n) 函数上,如果 n 为素数则返回 True,否则返回 False。我们之前迭代地编写了一个,但似乎无法弄清楚如何递归地执行它。这是我们目前所拥有的:
def is_prime(n):
if n < 2: return False
#1 or 0 is not prime, base case 1
if n == 2 or n == 3: return True
#2 and 3 are both prime, base case 2
if is_prime(n-1): return False
#This checks if n-1 is prime, b/c if so then n must not be prime
#However, this only works b/c the first few numbers have lots of primes
return True
#Only returns True if nothing else has returned
如果有人可以帮助我们一点,最好只是通过几个提示,那就太好了。谢谢!
【问题讨论】:
-
如果
n-1是素数而n > 3那么n是复合数。除了这个微不足道的观察之外,知道n-1会发生什么,你对n知之甚少。没有很好的方法可以减少检查n是否为质数的问题,而不是检查n-1是否为质数的问题。 -
说实话,我认为这不是递归的好选择。迭代解决方案将更简单、更快。我知道你在这件事上别无选择,但对我来说,这似乎是一项愚蠢的任务。
-
@TomKarzes 我同意在 Python(或大多数语言)中这样做没有什么意义,但是在像 Lisp 这样的语言中,大多数计算都是递归完成的。一门好的计算机科学入门课程应该让学生了解各种范式,因此作为一种学习练习来弄清楚如何递归地做这样的事情是有意义的。
标签: python python-3.x recursion primes