赞
踩
本系列主要整理前端面试中需要掌握的知识点。本节介绍对尾递归的理解,以及一些主要的应用例子。
//普通递归求阶乘:如果n等于5,这个方法要执行5次,才返回最终的计算表达式,这样每次都要保存这个方法,就容易造成栈溢出,复杂度为O(n)
function factorial(n) {
if (n === 1) return 1;
return n * factorial(n - 1);
}
factorial(5) // 120
//尾递归求阶乘:每一次返回的就是一个新的函数,不带上一个函数的参数,也就不需要储存上一个函数了。尾递归只需要保存一个调用栈,复杂度 O(1)
function factorial(n, total) {
if (n === 1) return total;
return factorial(n - 1, n * total);
}
factorial(5, 1) // 120
function sumArray(arr,total){
if(arr.length === 1){
return total
}
return sumArray(arr,total+arr.pop())
}
console.log(sumArray([1,2,3,4],0));
function factorial2(n,start=1,total=1){
if(n<2){
return total
}
return factorial2(n-1,total,total+start)
}
console.log(factorial2(5));
function flat(arr=[],result=[]){
arr.forEach(item =>{
if(Array.isArray(item)){
result = result.concat(flat(item,[]))
}
else{
result.push(item)
}
})
return result
}
console.log(flat(a));
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。