Offer_50 快速幂算法

实现 pow(xn) ,即计算 x 的 n 次幂函数(即,xn )。

 

思路分享:判断n是否为0,然后判断n是或否为偶数,保存x的n/2的次方,如果n为偶数,直接返回t*t,如果为奇数,判断n是否小于0,小于的话,返回1/x* t*t,否则返回t* t * x;

class Solution {
    public double myPow(double x, int n) {
        if (n == 0){
            return 1;
        }
        // 快速幂算法实现,有没有更快的算法实现x的n次方呢
        double t = myPow(x, n / 2);
        if ((n & 1) == 0) {
            return t * t;
        } else {
            return (n > 0 ? x : 1.0 / x) * t * t;
        }
    }
  
  // 非递归写法
  public double myPow01(double x, int n) {
        if (n == 0){
            return 1;
        }
        // 快速幂算法实现,有没有更快的算法实现x的n次方呢
        double res = 1.0;
        for (int i = n; i != 0; i / 2) {
       if (i % 2 != 0) res *= x;
       x *= x;
     }
     return n < 0 ? 1 / res : res;
}
 }

 

posted @   牵魂  阅读(28)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示