Thinking in scala (8)---- 乘幂计算

递归的方式:

b^n = (b^(n/2))^2 若n是偶数

b^n = b*(b^(n-1)) 若n是奇数

迭代的方式

product:存储中间结果,初始化为1

b^n = (b^2)^(n/2) * product       若n是偶数

b^n = b^(n-1)       * product*b    若n是奇数

递归方式比较简单,这里不再贴上实现的代码,下面是用迭代方式计算乘幂的Scala代码:

object expt{
  def f(b:Int,n:Int,product:Int):Int={
    if(n==1) b*product
    else if(isOdd(n)) f(b,n-1,b*product)
    else f(b*b,n/2,product)
  }
  def isOdd(n:Int)={
    n%2 == 1
  }
  def expt(b:Int,n:Int)=f(b,n,1)
  def main(args:Array[String])=
  {
    println(expt(2,10))
    println(expt(2,11))
    println(expt(5,9))
  }
}

无论是递归算法还是迭代算法,时间复杂度都是O(lg(n)),递归算法的空间复杂度是O(lg(n)),迭代算法的空间复杂度是O(1)

上一篇:C语言中头文件——你乱吗????


下一篇:安卓微信浏览器中location.href失效的问题