當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript递归应用与实践
生活随笔
收集整理的這篇文章主要介紹了
JavaScript递归应用与实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
遞歸簡單來說就是函數內調用自生的一種方法,形如:
function foo(){foo() } 復制代碼下面我列舉一些常用的遞歸應用。
1. 求和,例如求1+2+3+4+...+100之和
分析如下:
sum(100)=sum(99)+100 sum(99)=sum(98)+99 ... sum(1)=sum(0)+1 復制代碼代碼實現:
function sum(n){if(n==1) return 1return sum(n-1)+n } console.log(sum(100)) // 5050 復制代碼特意說明一下使用遞歸一定不要忽略退出條件,否則會陷入死循環。
2.求階乘 例如10!
function factorial(n) {if(n==1) return 1return factorial(n-1)*n } console.log(factorial(10)) // 3628800 復制代碼3.平展組織
在實際應用之中,經常會遇到類似于組織樹結構
var tree=[{name:'jack',children:[{name:'jack2',children:[{name:'jack3'}]}]},{name:'tom',children:[{name:'tom2',children:[{name:'tom3'}]}]}... ] 復制代碼我們往往需要對組織樹進行平展來更方便我們的開發,例如我們需要得到一個所有的名稱name數組等,采用遞歸實現如下:
var res=[] function flatTree(arr){for(let i=0;i<arr.length;i++){ res.push({name:arr[i].name})if(arr[i].children.length!=0){return flatTree(arr[i].children)}else{continue;}} } tree.forEach(function(item,index){flatTree([item]) }) 復制代碼4.數據分組
例如對于數組[1,5,10,15,21,26,31,36,41,50,55,70] 每隔五秒應該要有數據,如果不是每隔五秒的數據應該劃入下一個組中,即分組后應該為
[[1,5,10,15],[21,26,31,36,41],[50,55],[70] ] 復制代碼實現代碼如下:
unction group(data) {if(data.length==0){return false}for(let i=0;i<data.length;i++){if (data[i+1] && (data[i+1]-data[i]<5)) {continue;} else {result.push(data.splice(0,i+1))group(data)break }}return } group(data) console.log(result) 復制代碼5. 對象復制(深拷貝)
function deepCopy(obj) {var result = Array.isArray(obj) ? [] : {};for (var key in obj) {if (obj.hasOwnProperty(key)) {if (typeof obj[key] === 'object') {result[key] = deepCopy(obj[key]);} else {result[key] = obj[key];}}}return result; } 復制代碼總結
以上是生活随笔為你收集整理的JavaScript递归应用与实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react学习(26)---获取antd
- 下一篇: 能源路由器:基于固态变压器的能源路由器结