我正在尝试创建一个程序,该程序列出输入的数字下方的所有素数,然后我想到了代码:
def primes():
num = 20
numlist = list(range(1,num+1))
i = len(numlist)
for j in numlist[2:]:
ans = divisible(j,i)
if ans:
numlist.remove(j)
print(numlist)
def divisible(m,n):
if m!=n and m%n==0:
return True
elif n == 1:
return False
else:
divisible(m, n-1)
primes()
(我使用了浏览器内置IDE,因此num
部分是输入的代理。)
我的想法是创建一个单独的函数divisible()
,当输入两个整数m
和n
时,将检查n
是否除以m
。我不确定自己的递归是否正确,但是我写了divisible(m,n-1)
的想法是,它将迭代从n
向下的所有整数,如果有的话,它将返回True
n
除以m
,如果到达False
,则除以1
。
在主代码中,m
遍历list
中的所有数字,而n
是同一list
中元素的总数。我将print(numlist)
放在if
语句中作为错误检查。我遇到的问题是打印什么。代码实际上什么也没返回。在这里递归的工作方式我有什么想念的吗?
答案 0 :(得分:1)
这里有很多错误:
您犯了一个常见的初学者递归错误,因为您有一个返回值的递归函数,但是当递归调用它时,您将忽略返回的值。您需要处理它或将其传递。
似乎该模量是向后的:
let color:string;
let area: number;
也许应该是:
if ... and m%n==0:
您的代码似乎没有在计算素数。看起来它正在计算if ... and n % m == 0:
的相对素数。
您从n
开始数字列表:
1
但是您从索引numlist = list(range(1,num+1))
开始测试:
2
哪个是数字for j in numlist[2:]:
,并且您永远不会检查数字3
的可除性。
即使使用所有这些修复程序,我也觉得您的算法无法正常工作。
答案 1 :(得分:0)
您的可除函数如果属于其他部分,则不会返回任何内容。更改为
def divisible(m, n):
if m!=m and m%n==0:
return True
elif n==1 :
return False
else:
return divisible(m,n-1)
这应该有效