【JavaScript 算法】- 递归

147 阅读1分钟

前言

为什么将递归作为算法篇章的第一篇呢,因为在我们之后的排序等等算法中,递归的应用可以说是无处不在,所以把它放在最前面来讲。

递归

稍微了解一点基础的应该都知道, 函数或者方法调用自身,这种情况我们叫做递归

那么递归适用于什么样的问题呢?

  • 问题与子问题,除了数据不同,求解思路完全一致。
  • 存在递归终止条件(比如说 i 从 1 递增到 100,到 100 时递归终止)
  • 问题的解可以分解为几个子问题的解(子问题就是数据规模更小的问题)

知道了适用场景,那递归的优缺点是什么呢?

优点 :代码简洁易懂

缺点 :空间复杂度高、有堆栈溢出风险、存在重复计算、过多的函数调用会耗时较多等性能问题。

切记!! 使用递归解决问题时,千万不要试图搞懂每一步的递归的过程,这样就会进入一个思维误区。
理解递归代码,就把它抽象成一个递推公式,不用想一层层的调用关系。
只需要将问题分解成若干个子问题,就只需要思考问题和子问题的关系,把它抽象成一个递推公式,不用想一层层的调用关系即可。