【发布时间】:2016-02-12 01:32:01
【问题描述】:
我一直在学习递归和错误处理。我很难理解为什么我的素数测试不起作用:
def is_prime4(n):
"""Recursive primality test"""
try:
div
except NameError:
div = n - 1
else:
div = div - 1
while div >= 2:
if n % div == 0:
print 'No, {number} is not prime because it is divisible by {div}.'.format(number = n, div = div)
return False
else:
return is_prime4(n)
else:
print 'Yes, {number} is prime indeed.'.format(number = n)
return 'True'
is_prime4(2)
is_prime4(3)
is_prime4(4)
我认为问题出在 try-except-else 语句中,但我很难理解原因。
感谢您的帮助。
【问题讨论】:
-
主要问题是您的代码中有语法错误。 try: div 不是合法序列。你需要一个命令,而不是一个表达式。
-
我不确定我是否理解。
try用于测试div的存在,并在必要时对其进行初始化。据我所知,that part is working. -
您使用的是哪个 Python 版本?我在2.7上,一开始就失败了。也许你有更高级的东西;我以前没有见过这种用法,所以我感谢你提供的链接。
-
另外,使用这种异常语法有什么特别的原因吗?大多数语言(包括 Python)的异常真的很慢。
-
素数测试不适合递归解决方案。你所做的只是低效地实现一个循环。