用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发展的越来越好吧。

Leave a Reply