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

Python3中如何不预设范围执行while循环 用莱布尼茨级数求π近似值

问题分析

你需要实现的是用莱布尼茨级数计算π的近似值,原代码的设计存在多个问题导致无法正常得到结果,也不需要预先设置迭代上限n。

原代码核心问题
  • 内存使用不合理:用列表存储所有历史项和计算结果完全没有必要,不仅需要提前设置n的上限,迭代次数大时还会占用极高内存,甚至触发内存不足问题。
  • 循环逻辑错误:while循环嵌套for循环的结构会导致如果预设的n不够大,for循环跑完还没达到精度要求时,while会重新触发for循环从头开始计算,永远无法满足退出条件,形成死循环。
  • 性能极低:每次迭代都调用sum(a)计算全列表的和,时间复杂度达到O(n²),迭代量稍大就会完全卡住。
优化实现方案

不需要预设迭代次数上限,仅保留必要的中间变量做无限迭代即可,空间复杂度为O(1),没有内存溢出风险:

def calculate_pi():
    sum_series = 0.0
    # 当前项的符号,初始为正
    sign = 1
    # 当前项的分母,初始为1
    denominator = 1
    # 上一次迭代计算的π值
    prev_pi = 0.0
    # 精度要求
    precision = 0.00000000005
    while True:
        sum_series += sign * (1 / denominator)
        current_pi = 4 * sum_series
        # 满足精度要求直接返回结果
        if abs(current_pi - prev_pi) <= precision:
            return current_pi
        # 更新下一次迭代的参数
        prev_pi = current_pi
        sign *= -1
        denominator += 2
补充说明

莱布尼茨级数的收敛速度极慢,要达到你要求的1e-11级别的精度,大约需要400亿次迭代,纯Python执行需要非常长的时间。如果只是验证代码逻辑,可以先把precision调大到1e-5,此时仅需要十万次左右的迭代,几秒内就能得到结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:21:03