蓝桥杯每日一题(15):莱布尼茨计算圆周率(python)

时间:2024-10-09 08:08:06

Topic:

历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式:
pai = 4*(1-1/3+1/5-1/7 …)
参见图
这个公式简单而优美,但美中不足,它收敛的太慢了。
如果我们四舍五入保留它的两位小数,那么:
累积1项是:4.00
累积2项是:2.67
累积3项是:3.47
。。。
请你写出它累积100项是多少(四舍五入到小数后两位)。
注意:只填写该小数本身,不要填写任何多余的说明或解释文字。

在这里插入图片描述

Solution_1:

直接将加和减的情况分开运算
将1,5,9等的情况进行相加
将3,7,11等的情况进行相减
最后四舍五入到小数后两位输出

Code_1:

a = 0

for i in range(1, 200, 4):
    a += (4 / i)

for j in range(3, 200, 4):
    a -= (4 / j)

print(round(a, 2))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
'
运行

Solution_2:

利用递归的算法
首先判断加和减的情况
之后不断递归i + 2和分别对ans进行加和减
最后满足基准条件(第100项时 i 为197)取两位小数后输出

Code_2:

def circle(i, ans):
    if i == 197:
        return round(ans, 2)
    if (i + 1) / 2 % 2 == 1:
        return circle(i + 2, ans + 4 / i)
    elif (i + 1) / 2 % 2 == 0:
        return circle(i + 2, ans - 4 / i)


print(circle(1, 0))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
'
运行

Answer:

3.13