Implement pow(x, n).spa
解題思路:code
求浮點數的冪次方,注意可能爲負數次冪;blog
能夠使用二分搜索的思想,當n爲偶數時,x^n = x^(n/2) * x^(n/2),所以只須要求得一半的冪次方,將結果平方,就獲得所求結果。遞歸
解題步驟:io
一、遞歸最底層,n == 0 時,返回1;class
二、求出t = pow(x, n/2);搜索
三、判斷n的奇偶性:di
a. 若是奇數,要判斷n的符號,n爲負數乘以1/x,n爲正數時乘以x;co
b. 若是偶數,不須要多乘;同時,也不須要判斷符號,由於符號形式已經包含在待乘的兩個t中;浮點數
代碼:
1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if (n == 0) 5 return 1; 6 double t = myPow(x, n / 2); 7 if (n % 2) { 8 return n < 0 ? 1/x*t*t : x*t*t; 9 } else { 10 return t*t; 11 } 12 } 13 };