`
nid007
  • 浏览: 44106 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

erlang入门系列(4) for循环,尾递归

阅读更多
因为Erlang里的变量只能一次赋值,所以并没有循环语句,只能用递归。所以所谓的Erlang for循环,也是用递归模拟的。看下面的求和代码:
for(Max, Max,Sum) ->
     Sum+Max;
for(First, Max,Sum) ->
     Sum2=Sum+First,
     for(First + 1, Max, Sum2). 


值得注意的是,如果循环次数过多,我们必须使用 尾递归。否则你的内存很快就会用光。尾递归我的理解是,调用了自身后,再没有别的代码要执行,概念上要说清楚还是比较 麻烦,各位意会吧。
下面是一个 非尾递归的示例:
loop() ->
	{From, {rectangle, Width, Ht}} ->
		From ! {self(), Width * Ht},
		loop(),
		someOtherFunc();
	{From, {circle, R}} ->
		From ! {self(), 3.14159 * R * R},
		 loop().


尽管尾递归不用消耗更的内存,然而它的效率仍然让我不敢恭维,我测试过1到100万的求和。用java的for循环实现,几乎是0秒就完成了,而用erlang的尾递归,却花了我33秒。下面是我的测试代码,如果你有更好的erlang实现,还请分享
main(_) ->
	Start = calendar:datetime_to_gregorian_seconds({date(), time()}),
	T=for(1,10000,0),
	End = calendar:datetime_to_gregorian_seconds({date(), time()}),
	io:format("~p ~p~n",[T,End-Start]).
	
for(Max, Max,Sum) ->
     Sum+Max;
for(First, Max,Sum) ->
     Sum2=Sum+First,
     for(First + 1, Max, Sum2). 




分享到:
评论
3 楼 腹黑君 2014-03-11  
Erlang不是分布式么。你试试分布式,开几条线程,那肯定很快。
2 楼 腹黑君 2014-03-11  
yanyu510 写道
可以参考以下代码

for(Max, Max) -> Max;
for(First, Max) -> First+for(First+1, Max).


这不好吧。。一直压栈,最后内存会崩掉的。
1 楼 yanyu510 2012-03-28  
可以参考以下代码

for(Max, Max) -> Max;
for(First, Max) -> First+for(First+1, Max).

相关推荐

    Erlang入门

    一本简约的Erlang语言入门书, 本书涵盖了从Erlang的起源到广泛应用的高可靠消息专递系统。

    Erlang入门:构建application练习2

    Erlang入门:构建application练习3,实例演示如果构建一个最简单的Erlang Application

    Erlang入门手册

    Erlang不但是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性:并发线程、作业调度、内存管理、分布式、网络化等。据说使用Erlang编写的Yaws Web服务器,其并发性能是apache的15倍!

    Erlang入门:构建application练习5(监督树)

    Erlang入门:构建application练习5(监督树),以实例完全演示监督树的用法,Erlang入门必须知道的那点事

    Erlang入门:构建application练习4(进程link的作用)

    Erlang入门:构建application练习4(进程link的作用),实例演示进程link的作用及效果

    erlang开发入门教程

    erlang是爱立信开发的程序开发语言,融合了函数式编程与面向对象编程,并行处理内建与程序语言内部,特别适合创建并发行、容错性、分布性要求比较高的软实时系统,掌握它程序员必备的一种编程技能,与它相似的语言...

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...

    erlang程序设计与入门

    erlang程序设计 erlang入门手册

    Erlang入门ppt

    Erlang的入门介绍ppt,英文的,但是比较有味道.

    erlang编程 Introducing Erlang

    erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent

    erlang入门学习经典资料(很不错)

    很不错的erlang学习资料。推荐刚上手的同学下载学习。

    erlang编程指南

    erlang编程语言圣经 erlang从业人员的必备书籍 erlang语言开发入门

    Learn You Some Erlang for Great Good

    Erlang is the language of choice for programmers who want to write robust, concurrent applications, but its strange syntax and functional design can intimidate the uninitiated. Luckily, there's a new ...

    erlang入门手册

    这个的确是个erlang入门的很好的教材,它通俗易懂,语言新意。

    programming-erlang-software-for-a-concurrent-world

    assumes no responsibility for errors or omissions,or for damages that may result from the use of information(including program listings)contained herein. Our Pragmatic courses,workshops,and other ...

    Erlang初级入门(英文pdf)

    该文档简要介绍了一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。

    erlang-20.3.4

    erlang-20.3.4 rabbitmq3.7.4 yum安装erlang yum安装rabbitmq

    erlang 入门练习

    NULL 博文链接:https://jias.iteye.com/blog/557863

    Erlang趣学指南

    (494页带目录的高清扫描版) 这是一本讲解Erlang编程语言的入门指南,内容通俗...内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。

    erlang 基础教程

    erlang基础教程,比较适合初学者学习使用

Global site tag (gtag.js) - Google Analytics