今天无意间在PHP,Python,Java,C四种语言中写了同样的功能,测试了下运行速度。结果有点看不懂了。
程序算法,最最最简单的一个递归程序
直接贴上运行结果:
python语言实现(3.4.4版本)
n=20时用时: 0.004489 s
n=30时用时: 0.576811 s
n=35时用时: 5.971856 s
n=36时用时: 9.770745 s
n=37时用时: 16.044687 s
n=38时用时: 25.300932 s
n=40时用时: 72.658443 s
java语言实现(1.7版本)
n=20时,程序运行时间:1ms
n=30时,程序运行时间:5ms
n=35时,程序运行时间:52ms
n=30时,程序运行时间:5ms
n=31时,程序运行时间:6ms
n=32时,程序运行时间:10ms
n=33时,程序运行时间:17ms
n=34时,程序运行时间:27ms
n=35时,程序运行时间:45ms
n=36时,程序运行时间:70ms
n=37时,程序运行时间:116ms
n=38时,程序运行时间:177ms
n=39时,程序运行时间:305ms
n=40时,程序运行时间:488ms
n=41时,程序运行时间:807ms
n=42时,程序运行时间:1297ms
n=43时,程序运行时间:2064ms
n=44时,程序运行时间:3391ms
n=45时,程序运行时间:5450ms
n=46时,程序运行时间:8848ms
n=47时,程序运行时间:14376ms
n=48时,程序运行时间:23264ms
n=49时,程序运行时间:38454ms
n=50时,程序运行时间:61447ms
C语言实现
当n=20时,用时0.000000 seconds
当n=21时,用时0.001000 seconds
当n=22时,用时0.001000 seconds
当n=23时,用时0.002000 seconds
当n=24时,用时0.003000 seconds
当n=25时,用时0.006000 seconds
当n=26时,用时0.009000 seconds
当n=27时,用时0.015000 seconds
当n=28时,用时0.024000 seconds
当n=29时,用时0.039000 seconds
当n=30时,用时0.063000 seconds
当n=31时,用时0.109000 seconds
当n=32时,用时0.161000 seconds
当n=33时,用时0.296000 seconds
当n=34时,用时0.452000 seconds
当n=35时,用时0.723000 seconds
当n=36时,用时1.208000 seconds
当n=37时,用时1.853000 seconds
当n=38时,用时2.982000 seconds
当n=39时,用时4.903000 seconds
当n=40时,用时7.827000 seconds
当n=41时,用时12.569000 seconds
当n=42时,用时20.310000 seconds
当n=43时,用时32.694000 seconds
当n=44时,用时53.489000 seconds
当n=45时,用时86.372000 seconds
php语言实现(7.0.1版本)
当n=20时,用时0.0017790794372559秒
当n=21时,用时0.0028221607208252秒
当n=22时,用时0.0044441223144531秒
当n=23时,用时0.010584115982056秒
当n=24时,用时0.014394044876099秒
当n=25时,用时0.020316123962402秒
当n=26时,用时0.032159090042114秒
当n=27时,用时0.056618928909302秒
当n=28时,用时0.083542108535767秒
当n=29时,用时0.14670014381409秒
当n=30时,用时0.21649193763733秒
当n=31时,用时0.36289286613464秒
当n=32时,用时0.56389999389648秒
当n=33时,用时0.93012285232544秒
当n=34时,用时1.4944548606873秒
当n=35时,用时2.3965449333191秒
当n=36时,用时3.9406790733337秒
当n=37时,用时6.3268599510193秒
当n=38时,用时10.309056043625秒
当n=39时,用时16.666467905045秒
这速度有两点看不懂
首先,JAVA速度竟然最快!竟然比C快?使用相同数据类型,几乎相同的代码,虚拟机里面的东西竟然能比C快?猜测或许是java虚拟机底层对代码进行了某些神奇的优化。
其次,不得不感叹PHP7的速度之快啊!PHP的zend处理速度完爆Python的编译器。
不过,不同语言,各自适用平台不同,各自擅长方面不同,这样比较意义也不大。纯属无聊,记录一下。
下面贴上代码:
首先是java:
public class test {
public static void main(String[] args) {
int n;
for(n=30;n<51;n++){
Long startTime = System.currentTimeMillis();//获取当前时间
test(n);
long endTime = System.currentTimeMillis();
System.out.println("n="+n+"时,程序运行时间:"+(endTime-startTime)+"ms");
}
}
public static int test(int n){
if(n==0)
return 1;
if(n==1)
return 1;
if(n>1)
return test(n-1)+test(n-2);
return 0;
}
}
下面是python:
#coding=gbk
import time
def f(n):
if n==0:
return 1
if n==1:
return 1
if n>1:
return f(n-1)+f(n-2)
start = time.clock()
##########计时开始#######################
n=38
f(n)
##########计时结束#######################
end = time.clock()
print("n=%d时用时: %f s" % (n,end - start))
接着是C语言:
#include "time.h"
#include "stdio.h"
int test(int n){
if(n==0)
return 1;
if(n==1)
return 1;
if(n>1)
return test(n-1)+test(n-2);
}
void main()
{
double start, finish;
for(int n=20;n<=50;n++){
start = clock();//取开始时间
test(n);
finish = clock();//取结束时间
printf( "当n=%d时,用时%f seconds\n",n,(finish - start) / CLOCKS_PER_SEC);//以秒为单位显示之
}
}
最后是PHP代码:
<?php
function test($a)
{
if($a==0)
return 1;
if($a==1)
return 1;
if($a>1)
return test($a-1)+test($a-2);
}
for($n=20;$n<42;$n++){
$Stime=0;
$Etime=0;
$Ttime=0;
$Stime=microtime(true);//获取程序开始执行的时间
//echo $Stime."<br/>";
test($n);
//为了实现有一定的时间差,所以用了一个FOR来消耗一些资源.
$Etime=microtime(true);//获取程序执行结束的时间
//echo $Etime."<br/>";
$Ttime=$Etime-$Stime;//计算差值
//echo $Ttime."<br/>";
$str_total=var_export($Ttime,TRUE);
if(substr_count($str_total,"E")){ //为了避免1.28746032715E-005这种结果的出现,做了一下处理.
$float_total=floatval(substr($str_total,5));
$Ttime=$float_total/100000;
}
echo "当n=".$n."时,用时".$Ttime.'秒<br/>';
}
?>