《JavaScript语言精粹》_学习笔记1_递归

学习内容来自 《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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值