硅藻泥网站怎么做,wordpress内容构建器,会员卡管理系统下载,江西岳顶建设工程有限公司网站递归简单来说就是函数内调用自生的一种方法#xff0c;形如#xff1a; function foo(){foo()
}
复制代码下面我列举一些常用的递归应用。 1. 求和#xff0c;例如求1234...100之和 分析如下#xff1a; sum(100)sum(99)100
sum(99)sum(98)99
...
sum(1)sum(0)1
复制代码代…递归简单来说就是函数内调用自生的一种方法形如 function foo(){foo()
}
复制代码下面我列举一些常用的递归应用。 1. 求和例如求1234...100之和 分析如下 sum(100)sum(99)100
sum(99)sum(98)99
...
sum(1)sum(0)1
复制代码代码实现 function sum(n){if(n1) return 1return sum(n-1)n
}
console.log(sum(100)) // 5050
复制代码特意说明一下使用递归一定不要忽略退出条件否则会陷入死循环。 2.求阶乘 例如10 function factorial(n) {if(n1) 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 i0;iarr.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.length0){return false}for(let i0;idata.length;i){if (data[i1] (data[i1]-data[i]5)) {continue;} else {result.push(data.splice(0,i1))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;
}
复制代码