递归算法实例

递归算法,是指在函数或子过程的内部,直接或者间接地调用自己的算法。

举例:

  已知数组 a=[1,[2,[3,[4,'null']]]], 算法实现数组 b=[4,[3,[2,[1,'null']]]],代码如下:

  

var tmp = [], a = [1,[2,[3,[4,'null']]]];
function loop(arr){
	tmp=[tmp.slice(0)];
	tmp.unshift(arr[0]);
        if(tmp[1] == ""){
            tmp[1]= "null";
        }
	if(Object.prototype.toString.apply(arr[1]) === '[object Array]'){
		loop(arr[1]);
	}
	return tmp;
}
loop(a);                

 

 可以优化一下上述代码,如下:

var tmp = [], a = [1,[2,[3,[4,"null"]]]];
function loop(arr){ 
	tmp=tmp.length?[tmp]:['null'];
	tmp.unshift(arr[0]); 
	if(Object.prototype.toString.apply(arr[1]) === '[object Array]'){ 
		loop(arr[1]); 
	} 
	return tmp; 
} 
loop(a);

 

 实例:如何删除一段长字符串中的多段相同的子字符串?比如删除字符串 str="haha 88wang 88wang jjaks88wang huashd" 中的88:

 

 var targetStr = "";
    function strMaker(str) {
    //从字符串末端开始检索goodsDescription,并将字符串一分为二 var _index = str.lastIndexOf("88"); if (_index == -1) { targetStr = str + targetStr; return; } //处理截取的后半段字符串,删除掉goodsDescription,拼接新的字符串 var subStr = str.slice(_index); subStr = subStr.slice(subStr.indexOf("wang")); targetStr = subStr + targetStr; //继续对前半段字符串进行分割截取,重复上述动作 str = str.substr(0, _index); strMaker(str); return targetStr; }

  

 这就是一个典型的递归算法,若将上述嵌套层数增加至N,递归的强大好处将更加明显。然而,递归算法逻辑稍显复杂,使用不慎,轻则影响性能,重则瘫痪程序。

 

转载于:https://www.cnblogs.com/george-wayne/p/4169398.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值