我求素数的递归有什么问题? (Python)

问题描述 投票:-1回答:1

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

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语句中作为错误检查。我遇到的问题不是打印。代码实际上什么也没返回。在这里,递归的工作方式我缺少什么吗?

python recursion primes
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)

这应该工作

© www.soinside.com 2019 - 2024. All rights reserved.