1. 程式人生 > >多種程式語言執行效率的比較

多種程式語言執行效率的比較

我們經常用不同種程式語言來完成我們的工作,但是它們的執行效率如何呢,我們通過遞迴的方式計算斐波那契數列的前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編譯器肯定優化過了。把解釋型語言和編譯型語言比執行速率也是耍流氓,總之,每個語言都有它的特點,他們各自在不同的場合發揮作用。

相關推薦

多種程式語言執行效率比較

我們經常用不同種程式語言來完成我們的工作,但是它們的執行效率如何呢,我們通過遞迴的方式計算斐波那契數列的前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( *)會帶來全表