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.
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
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:
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
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.
Publicar un comentario