码迷,mamicode.com
首页 > 其他好文 > 详细

用尾递归减少函数的运算内存

时间:2018-01-07 17:32:06      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:bsp   highlight   分享   函数   erlang   技术   http   bubuko   gpo   

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趣学指南》

技术分享图片

 

用尾递归减少函数的运算内存

标签:bsp   highlight   分享   函数   erlang   技术   http   bubuko   gpo   

原文地址:https://www.cnblogs.com/zzqboy/p/8228085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!