我必须使用递归找出 number(N) 是否为质数,不允许循环。我已经尝试将使用 for 循环的常用代码转换为递归代码,但它的行为并不相同。这个函数包含在另一个函数中,它是另一个函数的一部分。只应使用和传递参数 a 和 N 这是我的函数。
a=2
def is_prime(a,N):
prime = True
if N <=1:
return
else:
if a >= N:
return
else:
if N == 2:
prime = True
print(N)
return
elif (N % a) == 0:
prime = False
return is_prime(a+1,N)
else:
prime = True
print(N)
return
我相信这个错误就在这里。
elif (N % a) == 0:
prime = False
return is_prime(a+1,N)
else:
prime = True
print(N)
这是我尝试转换的代码。
if num > 1:
for i in range(2,num):
if (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
break
else:
print(num,"is a prime number")
else:
print(num,"is not a prime number")
原文由 Amiel Moodley 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的解决方案很接近,只需进行一些更改即可使其工作。
您没有给出任何调用此函数的示例,但我假设它总是以
a
为 2 调用,因为任何其他值都没有意义。所以如果你像这样运行上面的函数,你应该得到正确的输出:我认为您误解了递归的工作原理,您在函数体中分配了这个
prime
变量,但从未对其进行任何操作。也许您的困惑来自对 Python 范围的误解。prime
变量不会在调用之间“共享”,它只会创建一个新的prime
每次。编辑:没有意识到你想要函数只打印出素数,如果它是素数,相应地改变了代码。