多種程式語言執行效率的比較
我們經常用不同種程式語言來完成我們的工作,但是它們的執行效率如何呢,我們通過遞迴的方式計算斐波那契數列的前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編譯器肯定優化過了。把解釋型語言和編譯型語言比執行速率也是耍流氓,總之,每個語言都有它的特點,他們各自在不同的場合發揮作用。
相關推薦
多種程式語言執行效率的比較
我們經常用不同種程式語言來完成我們的工作,但是它們的執行效率如何呢,我們通過遞迴的方式計算斐波那契數列的前40項和來比較。拿來進行比較的程式語言有:C,C#,Java,JavaScript,Python,Lua等。拭目以待吧 C語言(GCC) #in
for迴圈和遞迴演算法的執行效率比較(c語言)
實驗目的 在程式語言中,對比不同程式設計風格的程式碼寫法,或者通過使用不同的編譯器和編譯優化引數,通過編譯器生成彙編程式碼,靜態分析所生成彙編程式碼的執行效率。 實驗平臺、工具 在window 7平臺下,採用vc++ 6.0編譯器來編寫相應的C程式,然後通過UltraCom
ArrayList 和 LinkedList的執行效率比較
bst 輸出 快捷 iteration sting 遍歷 面向對象 循環 集合 一、概念: 一般我們都知道ArrayList* 由一個數組後推得到的 List。作為一個常規用途的對象容器使用,用於替換原先的 Vector。允許我們快速訪問元素,但在從列表中部插入和刪
select count(*)、count(1)、count(0)的區別和執行效率比較
rst 區別 如果 定性 count(0 決定性 計算 fir 執行 區別 執行效率比較 執行效率從高到低 count(*)=count(1)=count(0)>count(colFirst)>count(colLast) 1.由於count(*)的算法
MySQL count(*)、count(1)、count(column)的區別和執行效率比較
count(*)、count(1)、count(column)區別 count(column) 會忽略為 null 的列,其他兩個不會。 執行效率 它們三個的效率如何呢?網上說的各
for-forEach-stream三種遍歷方法執行效率比較
想法 在JDK-8中,新添加了很多的方法,比如說現在我所說的forEach,該方法是用於集合遍歷的,其方式相當於傳統的for迴圈遍歷方式,只是與其不同之處就在於採用了lambda表示式,因而在進行迴圈遍歷時程式碼更加的簡介。 但是我們知道,在JDK-8中,除了可以採用forEach來
sql語句or與union all的執行效率比較
當SQL語句有多個or語句時,可以考慮使用union或者union all代替來提高速度。使用or的SQL語句往往無法進行優化,導致速度變慢。但這不是固定的,有時候使用or速度會更快些。具體情況還要經過測試為準。如果加索引的話,也可能實現速度優化。 實驗表格如下,實
【傑瑞的專欄】架構師、指令碼語言專家;精通Python、Shell、正則表示式;熟悉Java、C、Tcl、Ruby、Scala、Perl等多種程式語言;在效能,開源,自動化測試方面有非常豐富的經驗
傑瑞的專欄 架構師、指令碼語言專家;精通Python、Shell、正則表示式;熟悉Java、C、Tcl、Ruby、Scala、Perl等多種程式語言;在效能,開源,自動化測試方面有非常豐富的經驗...
你真的需要掌握多種程式語言嗎?
簡述 我剛剛斷送了自己的職業生涯,沒錯,很多人都這樣對我說。 同事得知我即將離開公司的訊息,大多數對此表示理解。但讓他們困惑的是,我目前就職的公司是一家 Windows 商店,用 C#.net 編寫程式碼,而我要入職的崗位要求在 Linux 環境下進行開發,
for-forEach-stream三種遍歷方法執行效率比較與選用思考
想法 設計 實現 結論 建議 想法 在JDK-8中,新添加了很多的方法,比如說現在我所說的forEach,該方法是用於集合遍歷的,其方式相當於傳統的for迴圈遍歷方式,只是與其不同之處就在於採用了lambda表示式,因而在進行迴圈遍歷時程
多種程式語言的“hello world!”寫法
C#include <stdio.h>main(){printf ("Hello World!\n");}C++#include <iostream.h>main(){for(;
600多種程式語言為何選學Python?這幾個理由足夠了!
注: 看完這幾個理由,建議新手入門買兩本書 《零基礎學Python》和《Python入門到實踐》 自2016年Python取代Java成為高校中最受歡迎的語言,從那時起它受歡迎的程度就沒有減退過。 隨著新時代的到來,Python正在不斷髮展壯大。如果你閱讀程式設
三個基本排序演算法執行效率比較(氣泡排序,選擇排序和插入排序)
1、冒泡演算法。 冒泡演算法是最基礎的一個排序演算法,每次使用第一個值和身後相鄰的值進行比較,如果是升序將大數向左邊交換,降序則向右邊交換。最終將大數移動到一邊,最終排成一個序列: public class Sorting { public void Bubble
九大程式語言的優劣比較
程式語言之間的對比,一直都是眾說紛紜,究竟哪種語言最好,我想沒有一個標準答案,對於不同的人和不同的需求來說,對好的定義就不盡相同,但是我們卻可以量化具體的指標,在9種主流程式語言之間給人們提供一個對比的參考,圖片展示如下: 那麼究竟應該選擇哪種語言進行學習發展以及就業研究呢
InnoDB與MyISAM中的count(*)的執行效率比較
今天同學們在群裡討論oracle的count(*)與count(1)的問題,正好提到mysql的情況。我突然想到自己遇到的問題:在myisam引擎執行count(*)速度非常快,而且執行速度與記錄條數無關,而innodb卻不是這樣,記錄越多,速度越慢。 於是做了一個
oracle裡面的count(1)與count(*)函式的執行效率比較。
count(1),其實就是計算一共有多少符合條件的行。 1並不是表示第一個欄位,而是表示一個固定值。 其實就可以想成表中有這麼一個欄位,這個欄位就是固定值1,count(1),就是計算一共有多少個1. 同理,count(2),也可以,得到的值完全一樣,count('x'),c
golang 利用閉包來獲取一段程式的執行效率時間,很簡單但是很經典
... func main(){ duration:=GetDuration(func(){ //do sth resp, err2 = client.Do(req)
你真的需要了解多種程式語言嗎?
我在謀殺自己的職業生涯。沒錯,很多人都這樣說我。 我的同事剛剛得知我即將離開公司的訊息。大多數表示理解。但讓他們困惑的是,我現在的公司是一家Windows商店,用C#和.net編寫程式碼。然而,我要去擔任的是Linux環境下主要語言為Java的開發工作。因為語言的改變
C#基礎-058 List集合、HashSet集合、HashTable集合、StringBuilder與String執行效率比較
static void Main(string[] args) { ArrayList list = new ArrayList();
Select count(*)和Count(1)的區別和執行效率比較
在MySQL中Count(*)或者Count(1)或者Count([列])或許是最常用的聚合函式。很多人其實對這三者之間是區分不清的。經常會看到一些所謂的優化建議不使用Count(* )而是使用Count(1),從而可以提升效能,給出的理由是Count( *)會帶來全表