Re: [問題] 跑遞迴數列效率問題

看板Python作者 (000)時間10月前 (2023/07/02 23:06), 編輯推噓1(100)
留言1則, 1人參與, 10月前最新討論串2/2 (看更多)
※ 引述《shingai (吸收正能量)》之銘言: : 想請教 : 若我想利用python中的套件sympy : 去計算出某遞迴數列的理論值 : 遞迴數列定義如下: : a_{n+2}=2*sin(15度)*a_{n+1}-a_n : a_1=2 : a_2=2*sin(15度) : (不太確定套件這樣用是否適合,總之跑得動,但要求14項數 : 之後的取值,就會卡住不動) : 碼如下: : from sympy import * : memo = {0:2, 1: (sqrt(6)-sqrt(2))/2} : def sinus_seq(n): : if not n in memo: : memo[n] = (2*(sqrt(6)-sqrt(2))/4)*sinus_seq(n-1)-sinus_seq(n-2) : return memo[n] : for i in range(12): : print("c[{}]={}".format(i,simplify(sinus_seq(i)))) : 執行時,當我把倒數第二列的range(k)改為k=15時, : 利用計算時間的套件 : 顯示出來的訊息 : CPU times: total: 4min 8s : 而k=12的訊息為CPU times: total: 12.7 s : 數字k更大k>15,就會卡住不動了 : 想請教有沒有可以改善更有效率的output出更多項的方法??例如要跑到第3000項數列值 : 先謝謝高手願意分享! 如果只是要算遞迴數列用Numpy就可以了吧 import numpy as np sin15 = np.sin(15 * np.pi / 180) list = np.zeros(3000) list[0] = 2 list[1] = 2 * sin15 for i in range(len(list) - 2): list[i + 2] = 2 * sin15 * list[i + 1] - list[i] print(list[i]) 這樣算個3000項也不慢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.209.193 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1688310375.A.BEA.html

07/03 10:58, 10月前 , 1F
3Q~
07/03 10:58, 1F
文章代碼(AID): #1aeP9dlg (Python)
文章代碼(AID): #1aeP9dlg (Python)