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
    }
    
  • 相关阅读:
    2017暑期集训Day 1
    17-06-28模拟赛
    17-06-26模拟赛
    平衡树学习笔记
    指针学习笔记
    17-06-14模拟赛
    17-06-11模拟赛
    17-06-02模拟赛
    17-05-31模拟赛
    培训补坑(day1:最短路&two-sat)
  • 原文地址:https://www.cnblogs.com/Sir-Lin/p/9805677.html
Copyright © 2011-2022 走看看