1. 程式人生 > >m的n次冪的幾種解法

m的n次冪的幾種解法

  1. 直接n次乘法,O(n)
  2. 當n為偶數時:m^n=(m^(n/2))^2;當n為奇數時:m^n=m*(m^((n-1)/2))^2;  O(logn)
  3.  將n轉化為二進位制形式:n = ak*2^k + ak-1*2^k-1 + ... + a1*2 + a0,其中ai = 0 或1 ,i = 0,1,2... k,還是見《程式設計之美》--計算斐波那契(Fibonacci)數列吧,可以隨便的搜一下;O(logn);
顯然1是最慢的,但是2的實現方法將決定它的效率,如果你以(n%2)==0來判斷n為偶數,那麼2的速度與1差不多,如果你以(n&1)==0來判斷則2就會比1快。 雖然2與3有相同的時間複雜度,但是在實驗中發現3要比2快很多很多!?我還想著會有很多原因,可是仔細想了一下,只有2是需要遞迴而3不需要這一個原因。