递归算法实例
遞歸算法,是指在函數或子過程的內部,直接或者間接地調用自己的算法。
舉例:
已知數組 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
總結
- 上一篇: MySQL主从复制(Master-Sla
- 下一篇: 抓糗百数据和图片的Python爬虫