【算法】本身實現x的n次冪(pow函數)

面試遇到了一個問題,是本身實現一個pow(x,n)函數返回一個值,是x的n次冪,回想當時回答的很差,就是死板的直接while 一直乘下去,面試官始不太滿意,我想也是,這也太簡單了,但是當時死活也想不出怎麼優化,剛一出門,想到了一個下降計算次數的方法java

好比,4的11次方,咱們能夠看作是4的5次方 乘以 4的五次方 乘以 4面試

這樣問題就化簡爲2種狀況函數

指數爲單數時,結果= x的n/2次方 * x的n/2次方 * x;優化

指數爲雙數時,結果=x的n/2次方 * x的n/2次方code

這樣循環累乘的次數縮小了一半class

如下是我本身寫的實現:
 循環

public double myPow(double x, int n) {
         if(n < 0){
            x = 1/x;
            n = -n;
        }else if( n == 0){
            return 1;
        }
        int r1 = n/2;
        boolean isDouble = n % 2 == 0;
        double result = 1;
        while(r1 > 0){
            result *= x;
            r1 --;
        }
        return isDouble? result*result:result*result*x;
    }
相關文章
相關標籤/搜索