皆さんこんにちは
おげんきですか?私はげんきです。
本日は最速決定戦やります。いやはやC++がはええええとかいいつつ
他の言語どうだっけなんて思う常日頃です。
エントリー
6つの言語で行いました
C++,Java,PHP,Python,Ruby,Javascript
種目
アッカーマン関数の計算
x = 3, y = 9 (以下を参照ください)
計測方法はtimeコマンドを用いた実行方法です。
※アッカーマン関数とは
で構成される再帰的な関数です。
判定方法
timeで計測しました。
ソースコード
C++
#include <iostream> using namespace std; int ack(int m,int n){ if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m-1,ack(m,n-1)); } int main(void){ int a = ack(3,9); cout << a << endl; }
Java
class Ack{ private int ack(int m,int n){ if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m-1,ack(m,n-1)); } public static void main(String args[]){ Ack ack = new Ack(); System.out.println(ack.ack(3,9)); } }
PHP
<?php function ack($m,$n){ if($m == 0){ return $n + 1; }else if($n == 0){ return ack($m-1,1); }else{ return ack($m-1,ack($m,$n-1)); } } echo ack(3,9); ?>
Python
import sys def ack(m,n): if m == 0: return n + 1 elif n == 0: return ack(m-1,1) else: return ack(m-1,ack(m,n-1)) if __name__ == '__main__': sys.setrecursionlimit(10000) print ack(3,9)
Ruby
def ack(m,n) if m == 0 then return n + 1 elsif n == 0 then return ack(m-1,1) else return ack(m-1,ack(m,n-1)) end end puts ack(3,9)
Javascript
function ack(m,n){ if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m-1,ack(m,n-1)); } console.log(ack(3,9));
結果
言語 | user | sys | total |
C++ | 0.01 | 0.00 | 0.01 |
Java | 0.12 | 0.02 | 0.14 |
Php | 1.67 | 0.12 | 1.79 |
Python | 2.66 | 0.14 | 2.80 |
Ruby | 0.91 | 0.25 | 1.22 |
javascript | 0.11 | 0.01 | 0.12 |
感想
最適化したC++はやはり早かった。
Javaもやっぱり早いね、次に来るのがjavascriptというのには少し驚いた。
ウェブで使われに使われまくるだけあってえらく早い、スクリプト言語なのに。
僕の大好きなPythonくんが遅すぎて泣きそう。