递归,是指在函数的定义中使用函数自身的方法。

这里主要是去了解:

  1. 递归的终止条件
  2. 递归的返回值

递归的终止条件

递归要包含一个终止条件,以保证递归不会无限循环无终止的调用。一旦忽略了终止条件,往往就会导致内存溢出。

var fibonacci = function(n) {
  if (n === 1 || n === 2) return 1;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

以上典型的斐波那契数列的递归调用例子,当参数 n 等于 1 或者 2 的时候,就会触发终止条件,不会继续递归调用。

递归的返回值

当我们需求的返回值比较简单时,可以参考上面的,当我们的返回值比较复杂(如数组,对象等)时,我们可以在调用的时候给默认值,最后返回最终值。

function pushArray(n, arr) {
  arr.push(n);
  if (n >= 10) {
    return arr;
  }
  return pushArray(n + 1, arr);
}

var r = pushArray(1, []);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]