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

如何对数组元素交替加减以实现Gregory-Leibniz圆周率计算

解决Gregory-Leibniz级数的交替加减求和问题

嘿,别着急!你已经完成了最关键的第一步——生成级数项数组,剩下的交替加减逻辑其实很容易落地,核心就是利用索引的奇偶性判断符号,或者直接用数学公式给每一项赋予符号系数。我给你两种实用的实现思路,附代码示例:

思路1:遍历数组时根据索引奇偶判断加减

既然你已经生成了所有4/(2n+1)形式的项数组(n从0开始),遍历的时候只需要检查当前项的索引:

  • 偶数索引(第0、2、4...项):加到结果里
  • 奇数索引(第1、3、5...项):从结果里减去它

举个Python的实现例子:

# 假设你已经生成好的级数项数组(这里用前5项做演示)
terms = [4/1, 4/3, 4/5, 4/7, 4/9]

pi_approx = 0.0
# 用enumerate同时获取索引和项值
for idx, term in enumerate(terms):
    if idx % 2 == 0:
        pi_approx += term
    else:
        pi_approx -= term

print(f"PI的近似值:{pi_approx}")

如果用JavaScript,写法类似:

// 已生成的级数项数组
const terms = [4/1, 4/3, 4/5, 4/7, 4/9];
let piApprox = 0;

terms.forEach((term, idx) => {
    idx % 2 === 0 ? piApprox += term : piApprox -= term;
});

console.log("PI的近似值:", piApprox);

思路2:用数学符号系数直接求和

Gregory-Leibniz级数的通项公式是:π = 4 * Σ[ (-1)^n / (2n+1) ](n从0到∞)。你生成的每一项4/(2n+1),只需要乘以(-1)^n(偶数n为+1,奇数n为-1),再把所有项求和即可。

用Python的列表推导式可以一行搞定:

terms = [4/1, 4/3, 4/5, 4/7, 4/9]
pi_approx = sum( term * ((-1)**idx) for idx, term in enumerate(terms) )
print(f"PI的近似值:{pi_approx}")

小提醒

Gregory-Leibniz级数的收敛速度特别慢,要得到π的前6位精确值,大概需要计算100万项左右。如果需要更快的收敛效果,可以考虑Machin公式这类更高效的方法,但如果只是练手的话,这个级数完全够用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:05:31