Comparativa de lenguajes I

Vamos a ir realizando una comparativa entre varios lenguajes de programación.
Estos serán C, perl, python y ruby.
Elegimos C porque es un lenguaje de nivel medio que nos dará un buen tope de eficiencia. Utilizaremos programas sencillos para que la habilidad como programador influya lo menos posible.
Tampoco nos importa la eficiencia. Se trata de una comparativa en tiempos de ejecución, no de realmente comparar lenguajes.
El primer programa consistirá en mostrar los primeros 33 números de Fibonacci. El último número calculado es 3524578
Primero utilizaremos una implementación recursiva. Mostraremos además el número de llamadas a la función, que debería ser independiente del lenguaje.
También es de esperar que las funciones recursivas tarden más, ya que estamos haciendo simples sumas y al hacerlo recursivo añadimos complejidad.
En el siguiente post mostrare los codigos utilizados.


RECURSIVO


Tiempos


C:
18454895 llamadas
real 0m0.636s
user 0m0.628s
sys 0m0.004s


Ruby:
18454895 llamadas
real 1m10.941s
user 1m2.888s
sys 0m8.001s


Perl:
18454895 llamadas
real 0m38.455s
user 0m38.418s
sys 0m0.016s



Python:
18454895 llamadas
real 0m29.659s
user 0m29.626s
sys 0m0.016s



ITERATIVO


Tiempos

C:
real 0m0.002s
user 0m0.000s
sys 0m0.000s

Ruby:
real 0m0.013s
user 0m0.004s
sys 0m0.004s

Python:
real 0m0.032s
user 0m0.016s
sys 0m0.008s

Perl:
real 0m0.006s
user 0m0.000s
sys 0m0.004s

Vemos la potencia de C y que la recursividad se paga caro.
Extraña que en modo iterativo python sea más lento. Aún así parece el más rápido de los lenguajes interpretados. Además el número de llamadas depende de que la sucesión empiece en 0, 1 o en 1, 1....
Si alguien se quiere entretener puede tratar de ver que ley de tiempos sigue cada procedimiento
(por ejemplo O(n) o O(1)...)



2 comentarios:

Hernan Berguan dijo...

No es muy pedagógico hablar de la recursividad únicamente en casos en los que la solución iterativa del problema es mucho más eficiente.

http://blogs.msdn.com/ericlippert/archive/2004/05/19/how-not-to-teach-recursion.aspx

La recursividad se paga caro en este caso, que es un claro ejemplo de cuándo no usar la recursividad.
:-P

Rol dijo...

mi intencion era comparar lenguajes no algoritmos, que ese seria un tema muy complejo.

Si quieres hacer ese comentario me parece bien, para ese algoritmo en particular, con esos parametros, y en mi maquina, la recursividad es peor.