面試遇到了一個問題,是本身實現一個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; }