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

Topic:

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

蓝桥杯每日一题(15):莱布尼茨计算圆周率(python)_第1张图片
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))

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))

Answer:

3.13

你可能感兴趣的:(python,蓝桥杯,算法,python,动态规划,递归算法,递归法)