多种编程语言执行效率的比较

我们经常用不同种编程语言来完成我们的工作,但是它们的执行效率如何呢,我们通过递归的方式计算斐波那契数列的前40项和来比较。拿来进行比较的编程语言有:C,C#,Java,JavaScript,Python,Lua等。拭目以待吧

C语言(GCC)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/timeb.h>
int fib(int n)
{
    if(n<2)
        return n;
    else
        return fib(n-2)+fib(n-1);
}

int main()
{
    const int N=40;
    struct _timeb t1,t2;
    _ftime(&t1);
    printf("计算结果:%d\n",fib(N));
    ftime(&t2);
    printf("计算%d个斐波那契数列和耗时:%.3lf秒\n",N,((t2.time*1000+t2.millitm)-(t1.time*1000+t1.millitm))/1000.0);

    return 0;
}

结果:0.749秒
C语言

Java (jdk 1.8)

package fib;

public class Main {


    public static int fib(int n)
    {
        if(n<2)
            return n;
            else
                return fib(n-2)+fib(n-1);
    }

    public static void main(String[] args)
    {
        int n=40;
        long t=System.currentTimeMillis();
        System.out.println("计算结果:"+fib(n));
        System.out.println("计算"+n+"个斐波那契数列和耗时:"+((System.currentTimeMillis()-t)/1000.0)+"秒");
    }
}

结果:0.424秒
java

C#(.NET Framework 4.5)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace Fib
{
    class Program
    {
        static int fib(int n)
        {
            if (n < 2)
                return n;
            else
                return fib(n - 2) + fib(n - 1);
        }
        static void Main(string[] args)
        {
            const int N = 40;
            Stopwatch time = new Stopwatch();
            time.Start(); 
            Console.WriteLine("计算结果:"+fib(N));
            time.Stop();
            Console.WriteLine("计算{0}个斐波那契数列和耗时:{1:0.000}秒", N, time.Elapsed.TotalMilliseconds/1000);
            Console.ReadKey();

        }
    }
}

结果:4.386秒
csharp

JavaScript(1.7)

function fib(n)
{
    if(n<2)
        return n;
    else
        return fib(n-2)+fib(n-1);
}
var N=40;
var start=new Date().getTime();
document.write("计算结果:"+fib(N)+"</br>");
var end =new Date().getTime();
document.write("计算"+N+"个斐波那契数列耗时:"+(end-start)/1000.0+"秒");

结果:1.483秒
JavaScript

Lua(5.3.3)

function fib(n)
if n<2 then
  return n
  else
  return fib(n-2)+fib(n-1)
  end
end

local N=40
local t=os.clock()
print("计算结果:"..fib(N))
print("计算"..N.."个斐波那契数列耗时:"..(os.clock()-t).."秒")

结果:22.068秒
Lua

Python(3.6.1)

# -*- coding: UTF-8 -*-
import  time

def fib(n):
    if n<2:
        return  n
    else:
        return  fib(n-2)+fib(n-1)

n=40
t=time.clock();
print("计算结果:%d"%fib(n))
print("计算%d个斐波那契数列和耗时:%f秒"%(n,(time.clock()-t)))

结果:59.396秒
python

总结:这个测试纯属娱乐,Java比C耗时还短真是不可思议,Java编译器肯定优化过了。把解释型语言和编译型语言比运行速率也是耍流氓,总之,每个语言都有它的特点,他们各自在不同的场合发挥作用。

猜你喜欢

转载自blog.csdn.net/e_one/article/details/75258920