寻找质数的递归有什么问题? (蟒蛇)

时间:2020-05-27 18:26:57

标签: python recursion primes

我正在尝试创建一个程序,该程序列出输入的数字下方的所有素数,然后我想到了代码:

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(),当输入两个整数mn时,将检查n是否除以m。我不确定自己的递归是否正确,但是我写了divisible(m,n-1)的想法是,它将迭代从n向下的所有整数,如果有的话,它将返回True n除以m,如果到达False,则除以1

在主代码中,m遍历list中的所有数字,而n是同一list中元素的总数。我将print(numlist)放在if语句中作为错误检查。我遇到的问题是打印什么。代码实际上什么也没返回。在这里递归的工作方式我有什么想念的吗?

2 个答案:

答案 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)

这应该有效

相关问题