存档

文章标签 ‘Erlang’

在Erlang中的两种递归写法 普通递归: recursive_sum([H|T]) -> H+recursive_sum(T); recursive_sum([]) -> 0. 尾递归: sum(L) -> sum(L, 0). sum([H|T], Sum) -> sum(T, Sum + H); sum([], Sum) -> Sum. 在Erlang文档效能向导部分有说明,尾递归比普通递归更快。 普通递归H+recursive_sum(T);在recursive_sum(T);返回之前H都会被压入stack等到返回结果再计算。 递归越深,内存将被吃的越多。面向过程编程或者面向对象编程也会常用到递归函数。当在Erlang这种函数式编程里无疑将更经常使用递归函数。所以更应该注意递归函数的效率和系统开销。 反过来在面向过程或者面向对象的语言中也可以用尾递归来提高效率减少系统开销。

17 views | 没有评论
五 18th, 2009 | Filed under Erlang
标签: