Erlang递归的性能问题:写出正确的尾递归代码

来源:互联网 发布:这就是面向对象编程 编辑:程序博客网 时间:2024/06/05 22:58

参考文档:http://erlang-china.org/study/the-right-tail-recursive.html

比较以下两个erlang程序的执行效率:

a) t1.erl

-module(t1).-export([fac/1]).fac(1) ->    1;fac(N) ->    N + fac(N - 1).

b) t2.erl

-module(t2).-export([fac/1]).fac(N) ->fac_i(N, 1).fac_i(1, X) ->    X;fac_i(N, X) ->    fac_i(N - 1, N + X).

测试发现t2(尾递归)拥有更好的性能。t1中由于需要把N暂存在stack里以便后续使用,当循环次数很大时会消耗大量内存。

原创粉丝点击