zoukankan      html  css  js  c++  java
  • 求幂

    递归求解

    递归的思路:
    2的10次方,那就调用自己10次,时间上应该是O(n)
    base 一个数的0次方是1
    不断的分化为子问题

    function pow(d, n) {
      console.log(`d -> ${d} n -> ${n}`)
      if (n === 0) {
        return 1
      }
      return pow(d, n-1) * d
    }
    

    迭代求解

    迭代求解的思路:
    比如2的10次方
    count product
    2,10, 1
    2 9 1 * 2
    2, 8 1 * 2 * 2
    时间复杂度O(n)
    空间复杂度O(n)

    function pow1(d, c, p) {
      if (c === 0) {
        return p
      }
      return pow1(d, c -1, p * d)
    }
    

    递归优化

    普通递归需要执行N次,
    n的10次方 实际上等 n的5次方 * n的5次方
    这样就可以优化执行速度

    function pow2(d, n) {
      console.log(`d -> ${d} n -> ${n}`)
      if (n === 0) {
        return 1
      }
      if (isEven(n)) {
        return pow2(d, n-1) * d
      }
      const r1 = pow2(d, n/2)
      return r1 * r1
    }
    
  • 相关阅读:
    LCS LIS
    补个线段树
    洛谷1522
    AC自动机
    WF 2017 I
    WF2017 E
    最小生成树计数 基尔霍夫矩阵树定理
    bitonic tour luogu1523
    code+11月月赛
    模拟退火
  • 原文地址:https://www.cnblogs.com/Sir-Lin/p/9805677.html
Copyright © 2011-2022 走看看