[問題] 程式執行效率的問題
我寫了一小段javascript來測試簡單的迴圈及比較複雜的遞迴兩種作法的效率,
卻發現遞迴的執行速度比較快,我自己看不太出來原因,不知道誰可以解釋一下
?
程式如下:
var input = [],output=[];
var input1=[],output1=[];
function times(n, f) {
var c=0;
return function() {
var args = [];
for(var i=0,j=arguments.length; i<j; i++) {
args.push(arguments[i]);
}
if(c<n) {
c++;
return f.apply(this, args);
} else {
return null;
}
};
}
var work = function(res) {
return res.shift();
};
var f1 = times(10, work);
var r1 = function(res, f) {
var ret = f(res);
if(null !== ret) {
output.push(ret);
r1(res, f);
}
};
var r2 = function(n) {
for(var i=0; i<n; i++) {
output1.push(work(input1));
}
};
function test1() {
input = [0,1,2,3,4,5,6,7,8,9];
output = [];
r1(input, f1);
}
function test2() {
input1 = [0,1,2,3,4,5,6,7,8,9];
output1 = [];
r2(10);
}
var count = 100000;
var d1 = new Date().getTime();
for(var i=0; i<count; i++) {
test1();
}
var d2 = (new Date().getTime()) - d1;
var d3 = new Date().getTime();
for(var i=0; i<count; i++) {
test2();
}
var d4 = (new Date().getTime()) - d3;
alert(d2);
alert(d4);
在我的Chrome瀏覽器中跑,test1()速度這樣測量平均是test2()的三倍...
IE9差距比較小,執行時間大約是2:3
Opera的差距大概到五倍
但是看起來明明是test1()執行的東西比較複雜才對...
--
Sapere Aude! 這就是啟蒙運動的口號!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.69.1
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):