怎麼能進一步優化此代碼:優化nbody算法F#
let rec nCollect func = function
| [] -> []
| x::xs -> let firstAndNext body (firstBody, ys) =
let newFirst, z = func firstBody body
newFirst, z::ys
let y, ys = List.foldBack firstAndNext xs (x, [])
y::(nCollect func ys)
此代碼是nbody仿真程序的一部分。它正在獲取每個身體,並在它和下一個身體之間應用func功能。結果用於下一次迭代。我用列表略微優化了它。問題在於輸入物體數量在10以下,但nCollect被稱爲數百萬次。例如,如果我在nCollect中使用尾遞歸,結果會更糟糕。
除了尾遞歸以外,你試過了什麼?你有測試顯示問題嗎? – Richard