You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已用循环实现Python质数打印,求无for/while循环的替代方法

不用循环实现2到50之间的质数打印

当然可以搞定!既然不能用for或while循环,我们可以靠递归或者利用Python内置函数的特性来实现,这里给你两种实用的方案:

方案1:递归质数判断 + 内置filter函数

首先写一个递归的质数判断函数,它通过不断递增除数来检查目标数是否为质数;然后用filter函数筛选出2到50之间符合条件的数,全程不需要自己写循环:

def is_prime(n, divisor=2):
    # 处理边界情况:2是质数,小于2的不是
    if n <= 2:
        return n == 2
    # 如果能被当前除数整除,不是质数
    if n % divisor == 0:
        return False
    # 如果除数的平方大于n,说明没有其他因数了,是质数
    if divisor * divisor > n:
        return True
    # 递归检查下一个除数
    return is_prime(n, divisor + 1)

# 用filter筛选range(2,50)里的质数,转成列表后打印
primes = list(filter(is_prime, range(2, 50)))
print(primes)

方案2:纯递归实现埃氏筛法

埃氏筛的核心是“标记非质数”,我们可以用递归模拟这个过程:递归遍历2到50的每个数,同时用递归检查当前数是否能被已找到的质数整除,完全不用任何循环语句:

def is_not_divisible(num, primes):
    # 如果没有已找到的质数,说明当前数是质数
    if not primes:
        return True
    # 如果能被第一个质数整除,不是质数
    if num % primes[0] == 0:
        return False
    # 递归检查下一个已找到的质数
    return is_not_divisible(num, primes[1:])

def sieve(n, current=2, primes=None):
    # 初始化质数列表
    if primes is None:
        primes = []
    # 遍历完所有数,返回质数列表
    if current > n:
        return primes
    # 如果当前数不能被已有的质数整除,加入列表
    if is_not_divisible(current, primes):
        primes.append(current)
    # 递归检查下一个数
    return sieve(n, current + 1, primes)

# 调用函数并打印结果
print(sieve(50))

两种方案运行后都会输出:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47],和你原来的循环代码结果一致。

内容的提问来源于stack exchange,提问作者Trikstar Pandora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:38:10