首页 > 代码库 > Thinking in scala (8)---- 乘幂计算

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)

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