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

Python栈递归素数计数器代码报错求助:统计指定区间素数数量

递归素数统计代码的问题排查与修复

我来帮你捋捋这段代码里的问题哈~

咱们先看核心错误:

  • 递归分支遗漏return语句:在calcularCantidadPrimosEnIntervalo函数的else分支里,你调用了递归但没把结果返回出去。当a不是素数时,这个分支会默认返回None,而不是把递归的统计结果传递下去。最后print的时候,你试图把字符串和None拼接,自然就会抛出类型错误啦。
  • 另外给个小优化建议:esPrimo函数里的循环其实不用遍历到a,只需要遍历到int(a**0.5)+1就行,这样能大幅提升大数字的素数判断效率。

下面是修复并优化后的代码:

def esPrimo(a):
    if a < 2:
        return False
    # 优化:只需要检查到a的平方根即可,减少循环次数
    for i in range(2, int(a**0.5) + 1):
        if a % i == 0:
            return False
    return True

def calcularCantidadPrimosEnIntervalo(a, b):
    if a > b:
        return 0
    else:
        if esPrimo(a):
            return calcularCantidadPrimosEnIntervalo(a + 1, b) + 1
        else:
            # 补上return,把递归的统计结果返回
            return calcularCantidadPrimosEnIntervalo(a + 1, b)

# 注意把结果转成字符串再拼接,避免类型错误
print("Numeros Primos: " + str(calcularCantidadPrimosEnIntervalo(1,7)))

运行这段代码的话,输出会是Numeros Primos: 4(1到7之间的素数是2、3、5、7,共4个),完全符合预期~

内容的提问来源于stack exchange,提问作者Esteban Mata

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:07:49