我尝试做一个尾递归函数来计算列表的元素,遵循规则,使用累加器,但是当我像这样运行它时:
lstcountr [1..98765432];;
我明白了:
System.OutOfMemoryException:引发了“System.OutOfMemoryException”类型的异常。
这是我的功能(我认为是尾递归/高效):
let lstcountr ls =
let rec loop ls total =
match ls with
| [] -> total
| hd::tl -> loop tl total+1I
loop ls 0I
这可以做得更好吗?