programmer@work

robe da informatici

Chiamate ricorsive Ruby vs Python

Facciamo un piccolo test: calcoliamo Fibonacci ricorsivamente in Ruby (v2.0.0) e in Python (v2.7.2) e vediamo chi vince in termini di tempo

Ruby Fibonacci code (f.rb)

def fib(n)
  if n == 0 || n == 1
    n
  else
    fib(n-1) + fib(n-2)
  end
end

36.times { |i| fib(i) }

Python Fibonacci code (f.py)

def fib(n):
  if n == 0 or n == 1:
    return n
  else:
    return fib(n-1) + fib(n-2)

for i in range(36):
  fib(i)

Ora lanciamo i due programmi nel seguente modo:

$ time ruby f.rb && time python f.py
real  0m4.795s
user  0m4.787s
sys   0m0.007s

real  0m12.935s
user  0m12.849s
sys   0m0.049s

Ecco Ruby impiega 4.795 secondi mentre Python 12.935 secondi!

Ruby vince nettamente su Python!!

Oh beh provate perĂ² questo codice in C (f.c):

int
fib (int n)
{
  if (n == 0 || n == 1)
    return n;
  else
    return fib (n-1) + fib (n-2);
}

int
main ()
{
  int i;
  for (i = 0; i < 36; i++)
    fib (i);
}

Compiliamo:

 gcc f.c

Ed eseguiamo:

$ time ./a.out
real  0m0.232s
user  0m0.229s
sys   0m0.003s

0.232 secondi!