美文网首页
递归核心思想

递归核心思想

作者: JX灬君 | 来源:发表于2021-07-18 20:02 被阅读0次
  1. 一个函数在内部调用其本身,那么这个函数就是递归函数
  2. 递归函数一定要有跳出条件,否则就会形成死循环
  3. 最先调用的栈内存最后结束,最后调用的栈内存最先结束
  • 基本格式
function fn() {
  if () {
    return
  }
  fn()
}
    /**1. 一个函数在内部调用其本身,那么这个函数就是递归函数
    2. 递归函数一定要有跳出条件,否则就会形成死循环
    3. 最先调用的栈内存最后结束,最后调用的栈内存最先结束 */
    function fn(n) {
      if (n === 1) {
        return 1
      }
      return n * fn(n - 1)
    }
    debugger
    console.log(fn(5));

    /**
     * 上述递归执行时,会在window作用域内占用栈内存
     * 计算fn(4)-> 占用fn(5)内存-> 占用fn(4)内存 -> 占用fn(3)内存 -> 占用fn(2)内存 -> 占用fn(1) 内存
     * 内存回收时 fn(1)内存-> fn(2)内存 -> fn(3)内存 -> fn(4)内存 -> fn(5) 内存
     * */

开启debugger查看调用栈(call stack)的占用释放


image.png

递归思想-数组扁平化(多层嵌套)

// 数组扁平化
    let arr = [1, 1, [2, [3, 3, 4], 2], 1]
    function ar(array) {
      let newArr = []
      for (let i = 0; i < array.length; i++) {
        // 是否是数组
        // 判断数据类型的四种方法
        // typeof
        // instanceof
        // constructor
        // Object.prototype.toString.call(x)
        if (Object.prototype.toString.call(array[i]) === "[object Array]"){
          newArr.push(...ar(array[i]))
        } else {
          newArr.push(array[i])
        }
      }
      return newArr
    }
    console.log(ar(arr));
// 结果: 1, 1, 2, 3, 3, 4, 2, 1

补充:数组扁平化(多层嵌套)- flat(Infinity) 方法 效果同递归方法一样

// flat() ES6数组扁平化专用方法,可以带参表示层数
let arr = [1, 1, [2, [3, 3, 4], 2], 1]
console.log(arr.flat(Infinity));
// 结果: 1, 1, 2, 3, 3, 4, 2, 1

相关文章

  • 递归核心思想

    一个函数在内部调用其本身,那么这个函数就是递归函数 递归函数一定要有跳出条件,否则就会形成死循环 最先调用的栈内存...

  • 快速排序

    核心思想:递归;然后寻找枢轴,在进行交换 #include using namespace std; templa...

  • 关于Json转model的一些小想法

    1、json转model的核心设计思想就是使用runtime+递归的思想 runtime的思想: 第一步:取出类里...

  • 144.94.145 二叉树的前序、中序、后序遍历

    题目 用非递归版本完成。 程序核心思想 递归版很简单,这里用非递归版本实现了一下。 前序遍历前序遍历需要一个栈。首...

  • 递归函数

    首先说一下递归函数的核心思想: 每一次递归,整体问题都要比原来减小,并且递归到一定层次时,要能直接给出结果! 接下...

  • 专题:递归与累加阶乘

    递归实现累加和阶乘 累加核心代码: 阶乘的核心代码: 阶乘的非递归实现思路: 阶乘的非递归实现核心代码:

  • 浅析递归算法

    递归定义:重复将问题分解为同类的子问题而解决问题的方法,其核心思想是分治策略。 递归算法简单来说就是自己调用自己。...

  • 43_递归的思想与应用(上)

    关键词:递归的思想、递归模型的一般表示法、递归函数 0. 递归的思想 递归是一种数学上分而自治的思想 将原问题分解...

  • 递归思想

    递归思想关注的是与当前步骤有关的上一步和下一步的关系,它不关注整体。 如何发现规律? 观察逆推重复 递归算法总是给...

  • 递归思想

    递归的含义: 就是一个函数内部再调用该函数本身的一种情形,这是语法形式上的。 具体场景是: 如果要解决的“最终问题...

网友评论

      本文标题:递归核心思想

      本文链接:https://www.haomeiwen.com/subject/njuapltx.html