1.看一下下面这个计算列表总和的函数
len([] ) -> 0; len( [_| T] ) -> 1 +len( T ) .
这样似乎很简洁,但是当T有上百万个的时候,会在内存上占上百万个数,原因是没有在每次的操作直接累加
相当于下面的过程
采用尾递归
tail_len(L) -> tail_len(L, 0). tail_len([], Acc) -> Acc; tail_len([_ | T], Acc) -> tail_len(T, Acc + 1).
这样就是每次递归都是两个数据相加,而不是等到最后才相加
2.参考
《Erlang趣学指南》