The*_*ost 1 algorithm optimization 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)
Run Code Online (Sandbox Code Playgroud)
此代码是nbody仿真程序的一部分.它正在获取每个正文并在它和下一个之间应用函数函数.结果用于下一次迭代.我用列表略微优化了它.问题是输入体的计数低于10,但nCollect被称为数百万次.例如,如果我在nCollect中使用尾递归,结果会更糟.