leetcode50:Pow(x, n)
阿新 • • 發佈:2018-12-11
思路:直接用迴圈來做,會提示超時。我們可以用遞迴來折半計算,每次把n縮小一半,這樣n最終會縮小到0,任何數的0次方都為1,這時候我們再往回乘,如果此時n是偶數,直接把上次遞迴得到的值算個平方返回即可,如果是奇數,則還需要乘上個x的值。還有一點需要引起我們的注意的是n有可能為負數,對於n是負數的情況,我們可以先用其絕對值計算出一個結果再取其倒數即可。
程式碼:
public class Pow50 { public static void main(String[] args) { System.out.println(myPow(2, 10)); System.out.println(myPow(2.1, 3)); } public static double myPow(double x, int n) { if (n >= 0) return helpPow(x, n); return helpPow(1.0 / x, -n); } private static double helpPow(double x, int n) { if(n==0) return 1; double half = helpPow(x, n / 2); if (n % 2 == 0) return half * half; else return x * half * half; } }
輸出: