我们经常用不同种编程语言来完成我们的工作,但是它们的执行效率如何呢,我们通过递归的方式计算斐波那契数列的前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秒
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秒
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秒
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秒
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秒
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秒
总结:这个测试纯属娱乐,Java比C耗时还短真是不可思议,Java编译器肯定优化过了。把解释型语言和编译型语言比运行速率也是耍流氓,总之,每个语言都有它的特点,他们各自在不同的场合发挥作用。