zoukankan      html  css  js  c++  java
  • 尾调用优化

    参考: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

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

  • 相关阅读:
    C++ string char[] 转化
    c++ 转化
    2014/4/16
    2014/4/11
    垂直电商现倒闭潮
    经典K线组合图解 > 正文
    上下影线
    分​析​主​力​试​盘​手​法
    nginx重新编译不停服
    nexus
  • 原文地址:https://www.cnblogs.com/oufeng/p/6368898.html
Copyright © 2011-2022 走看看