1. 程式人生 > >leetcode50:Pow(x, n)

leetcode50:Pow(x, n)

思路:直接用迴圈來做,會提示超時。我們可以用遞迴來折半計算,每次把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;
	}
}

輸出: