您的位置:首页 > 编程语言 > Java开发

javasavacript 递归优化,递归变while

2016-05-01 20:17 267 查看
javascript优化无止境,突发奇想把递归变成while,没想到还真有性能上的提升,只是我不明白其中的原理是什么,如果有那位大神知道,还请指导。
说一下思路:在一般树状数据结构中,插入和删除往往都用到递归,如果在插入数据时,只是改变插入数据时的作用域,我们就把递归省去了,好了,贴代码:


var t = ( //一个节点类,用闭包创建
function(){
function t(id){
var s =this;
s.id= id ;
s.node =[];//记录子节点
}
t.prototype.insert = function(node){//插入函数
var s =this;
while(s.node[0] !== undefined)//判断是否有子节点
{
s = s.node[0];//改变作用域

}
s.node.push(node);//没有子节点,退出循环,添加子节点
return;

};
return t
}
)();
var sta=Date.now();
var b = new t(0);//new一个根节点
for(var i = 0;i<10000;i++)//插入一万个子节点
{
var c = new t(i+1);
b.insert(c);
}
console.log(Date.now()-sta);




谷歌浏览器中递归调用时间大约是1080~1334;而改变作用域时间是640~1189;而且改变作用域时间多集中在1000以下;

if(s.node[0] !== undefined)//判断是否有子节点
{
s = s.node[0].insert(node);//递归

}


这是递归调用;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息