javasavacript 递归优化,递归变while

来源:互联网 发布:软件高级工程师待遇 编辑:程序博客网 时间:2024/06/08 18:46
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);//递归            }

这是递归调用;

0 0
原创粉丝点击