几种语言的计算速度问题

今天无意间在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/>';
				
}
 
?>


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值