よりいろんな言語でフィボナッチ

恒例のフィボナッチベンチで V8 と Smalltalk、Ruby、Python、Scheme とを戦わせてみる - Smalltalkのtは小文字ですをまねっこ。
C++,C,OCaml,Java,F#,C#,Haskell,Scheme,JavaScript,Python,Ruby,Perl,ioでのフィボナッチ(36)。
あのフィボナッチさんもいまや中年だな。実行環境はWindows上のVMware上のLinux


Smalltalkなくてすみません。じつはこれ昔やったものなんだけどそんときなんか挫折した記憶が。

template  struct fib { enum{fn = fib::fn + fib::fn}; };
template <> struct fib<0> { enum{fn = 1}; };
template <> struct fib<1> { enum{fn = 1}; };

int const f = fib<36>::fn;

#include 

int main(){
	printf("%d\n", f);
	return 0;
}

./fib_cpp.exe 0.004345sec
                                                                                                          • -
#include int fib(int n){ return n < 2 ? 1 : fib(n-2)+fib(n-1); } int main(){ printf("%d\n", fib(36)); return 0; } ./fib_c-O3.exe 0.134033sec
                                                                                                          • -
open Pervasives let rec fib n = if n < 2 then 1 else fib(n-2) + fib(n-1);; print_int (fib 36); print_string ("\n"); ./fib_mlo.exe 0.30398sec
                                                                                                          • -
public class fib { public static int f(int n){ return n < 2 ? 1 : f(n-2)+f(n-1); } public static void main(String[] args) { System.out.println(f(36)); } } java fib 0.358354sec
                                                                                                          • -
#include int fib(int n){ return n < 2 ? 1 : fib(n-2)+fib(n-1); } int main(){ printf("%d\n", fib(36)); return 0; } ./fib_c.exe 0.542787sec
                                                                                                          • -
open Pervasives let rec fib n = if n < 2 then 1 else fib(n-2) + fib(n-1);; print_int (fib 36); print_string ("\n"); mono fib_fs-O3.exe 0.564644sec
                                                                                                          • -
open Pervasives let rec fib n = if n < 2 then 1 else fib(n-2) + fib(n-1);; print_int (fib 36); print_string ("\n"); mono fib_fs.exe 0.567634sec
                                                                                                          • -
using System; class Program { static int fib(int n){ return n < 2 ? 1 : fib(n-2)+fib(n-1); } static void Main(string[] args) { Console.WriteLine(fib(36)); } } mono fib_cs.exe 0.595356sec
                                                                                                          • -
fib n | n < 2 = 1 | otherwise = fib(n-2) + fib(n-1) main = putStrLn(show(fib(36))) ./fib_hs-O.exe 2.121945sec
                                                                                                          • -
(define (fib n) (if (< n 2) 1 (+ (fib (- n 2)) (fib (- n 1))))) (display (fib 36)) (display "\n") gosh ./fib.scm 4.140425sec
                                                                                                          • -
var fib = function (n){ if (n < 2){ return 1; } return fib(n-2) + fib(n-1); } print(fib(36)) js ./fib.js 14.837408sec
                                                                                                          • -
def fib(n): if n < 2: return 1 return fib(n-2)+fib(n-1) print fib(36) python ./fib.py 19.355325sec
                                                                                                          • -
def fib(n) n < 2 ? 1 : fib(n-2)+fib(n-1) end p fib(36) ruby ./fib.rb 26.329319sec
                                                                                                          • -
sub fib{ my $n = shift; $n < 2 ? 1 : fib($n-2)+fib($n-1); } print(fib(36)); print "\n"; perl ./fib.pl 31.538763sec
                                                                                                          • -
fib := method(n, if(n<2, 1, fib(n-2)+fib(n-1) )) fib(36) println io ./fib.io 515.357514sec
                                                                                                          • -