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

Posted zzqboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用尾递归减少函数的运算内存相关的知识,希望对你有一定的参考价值。

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

技术分享图片

 

以上是关于用尾递归减少函数的运算内存的主要内容,如果未能解决你的问题,请参考以下文章

递归函数,二分运算

递归函数

(十七)python 3 函数递归

Python函数

函数7—递归

递归思想(钻出牛角尖)