用Erlang实现的斐波拉契数列计算
用Erlang实现的斐波拉契数列计算
作者: | gashero |
---|
前几日有好友发来帖子告诉我一个Ruby比Python快的实验,见了以后立马写了一个程序,不过优化效果很有限。最后倒是想起来erlang,一直吵吵着想学,但是一直学的都不紧不慢的,没效果。于是准备拿这个例子来尝试一下。
经过了好久的学习,最终写出了一个比较龌龊的例子,如下:
-module(fibmod). -export([fib/1,calc/1,print/2]). fib(0) -> 0; fib(1) -> 1; fib(X) -> fib(X-1)+fib(X-2). calc(35) -> print(35,fib(35)); calc(N) -> print(N,fib(N)), calc(N+1). print(Number,Fibnum) -> io:format("n=~w => ~w~n",[Number,Fibnum]).
也就是这个例子了,要在erlang控制台中运行,需要按照如下步骤:
10> c(fibmod). {ok,fibmod} 11> fibmod:calc(1). n=1 => 1 n=2 => 1 n=3 => 2 n=4 => 3 n=5 => 5 n=6 => 8 n=7 => 13 n=8 => 21 n=9 => 34 n=10 => 55 n=11 => 89 n=12 => 144 n=13 => 233 n=14 => 377 n=15 => 610 n=16 => 987 n=17 => 1597 n=18 => 2584 n=19 => 4181 n=20 => 6765 n=21 => 10946 n=22 => 17711 n=23 => 28657 n=24 => 46368 n=25 => 75025 n=26 => 121393 n=27 => 196418 n=28 => 317811 n=29 => 514229 n=30 => 832040 n=31 => 1346269 n=32 => 2178309 n=33 => 3524578 n=34 => 5702887 n=35 => 9227465 ok 12>
当时按照例子,Ruby1.9要十几秒,Python的要三十几秒。不过我在这台机器上没有测试。我在这台笔记本(T43 1.86GHz)上运行如上erlang程序,估算时间是4秒以内(注:不知道如何用erlang计时)。
其实例子超级简单,不过多少算是第一个erlang程序,希望是一个好的开始。现在越来越看好erlang了,也祝愿erlang发展的越来越好吧。