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