码迷,mamicode.com
首页 > 其他好文 > 详细

尾调用优化

时间:2017-02-06 00:12:28      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:tor   http   color   function   class   推荐   logs   factor   call   

参考:http://www.ruanyifeng.com/blog/2015/04/tail-call.html  

感谢阮老师。

 

尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。

//正确的尾调用
function f(x) {
  if (x > 0) {
    return m(x)
  }
  return n(x);
}

function f(x){
  return g(x);
}

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

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

 

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

//一般的递归写法,复杂度 O(n) ;准确来说是空间复杂度;
function factorial(n) {
  if (n === 1) return 1;
  return n * factorial(n - 1);
}

factorial(5)        // 120


//尾递归的写法,复杂度 O(1) 。
function factorial(n, total) {
  if (n === 1) return total;
  return factorial(n - 1, n * total);
}

factorial(5, 1)     // 120

递归的写法推荐用尾递归。

尾调用优化

标签:tor   http   color   function   class   推荐   logs   factor   call   

原文地址:http://www.cnblogs.com/oufeng/p/6368898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!