学习内容来自 《JavaScript语言精粹》一书。
递归
1.汉诺塔
var hanoi=function(disc,src,aux,dst) { if(disc>0) { hanoi(disc-1,src,dst,aux); document.writeln('Move disc '+ disc + ' from '+src+' to ' +dst); hanoi(disc-1,aux,src,dst); } };
调用:hanoi(3,'Src','Aux','Ds');
2.遍历Dom(文档对象模型)
var walk_the_Dom=function walk(node,func) { func(node); node=node.firstChild; while(node) { walk(node,func); node=node.nextSibling; } }
var getElementsByAttribute=function(att,value) { var results=[]; walk_the_Dom ( document.body,function(node) { var actual=node.nodeType===1 && node.getAttribute(att); if(typeof actual==='string' && (actual===value || typeof value !== 'string') ) { results.push(node); } }); return results; };
注:JS中,深度递归可能造成堆栈溢出而运行失败。也就是JS中没有的尾递归优化,以下是尾递归的形式:(其实就是函数最后才执行递归就叫做尾递归)
var factorial = function factorial(i,a)
{
a= a || i;
if((i<2))
{
return a;
}
return factorial(i-1,a*i);
};
document.writeln(factorial(4)); // 24