藍橋杯每日一題(15):萊布尼茨計算圓周率(python)
阿新 • • 發佈:2021-01-23
技術標籤:python藍橋杯演算法python動態規劃遞迴演算法遞迴法
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))
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