尾调用 && 尾递归

某个函数的最后一步是调用另一个函数

function f(x){
  return g(x);
}
函数f的最后一步是调用函数g,这就叫尾调用。

以下三种情况,都不属于尾调用

// 情况一
function f(x){
  let y = g(x);
  return y;
}

// 情况二
function f(x){
  return g(x) + 1;
}

// 情况三
function f(x){
  g(x);
}

尾调用不一定出现在函数尾部,只要是最后一步操作即可

function f(x) {
  if (x > 0) {
    return m(x)
  }
  return n(x);
}函数mn都属于尾调用,因为它们都是函数f的最后一步操作。

尾递归

函数调用自身,称为递归。如果尾调用自身,就称为尾递归

function factorial(n, total) {
  if (n === 1) return total;
  return factorial(n - 1, n * total);
}

factorial(5, 1) // 120

  

 

posted @ 2020-03-24 16:04  banzhuxiang  阅读(170)  评论(0)    收藏  举报