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
相关产品推荐
相关产品推荐

