1. 程式人生 > 其它 >藍橋杯每日一題(15):萊布尼茨計算圓周率(python)

藍橋杯每日一題(15):萊布尼茨計算圓周率(python)

技術標籤: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