已用循环实现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
相关产品推荐
相关产品推荐

