jS之递归

    科技2026-01-27  6

    jS之递归及数组扁平化

    简而言之,递归就是在函数内自己调用自己或者间接调用自己。

    必要条件,递归必须要有出口,负责会造成栈溢出。(Uncaught RangeError: Maximum call stack size exceeded)

    递归经典应用场景(斐波那契数列)

    //斐波那契数列 //1,1,2,3,5,8,13,.... //求第n位数? //根据已知数列可推导: //第一位f(1) = 1; //第二位f(2) = 1; //第三位f(3) = f(3 - 1) + f(3 - 2); //第四位f(4) = f(4 - 1) + f(4 - 2); //第五位.... //以此类推可得:f(n) = f(n -1) +f(n -2); function recursion(n){ if(n === 1 || n === 2)return 1;//递归出口 return recursion(n - 1) + recursion(n - 2); } console.log(recursion(n));//输出第n位

    数组扁平化

    //利用递归将多维数组扁平化 var arr = [1,2,[3,4],[5,[6,7],[8],9],10,11]; function flatFun(arr){ //定义一个新数组来保存扁平化后的数组 var newArr = []; /**一个Map对象在迭代时会根据对象中元素的插入顺序来进行 一个一个 * for...of 循环在每次迭代后会返回一个形式为[key,value]的数组 */ arr.map(item => { //检测当前项是不是数组 if(item && Array.isArray(item)){ //如果是数组,通过递归调用重复以上步骤,并将最终递归返回的数组与新数组连接 newArr = newArr.concat(flatFun(item)) }else{ //如果该项不是数组,直接push到新数组里面去 newArr.push(item) } }) //最后返回新数组 return newArr; } console.log(flatFun(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    Processed: 0.045, SQL: 9