题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
解法:
将n次幂拆分成若干次平方。以示例1的n = 10为例:
0 -> 1-> 2-> 5-> 10;
这样一来,利用递归的展开性,可以从逻辑链的右边往左边推。当n为奇数时,后一项的结果为y = y * y * x,当n为偶数是,后一项为y = y * y。用一开始的n /2 ,判断递归每一层的奇偶,来判断该层需要返回的y值。直到最后一层n == 0跳出,返回0。因为任何数的0次方都是0。
class Solution {
public:
double quickMul(double x, int n)
{
if (n == 0)
return 1.0; //x的0次方等于1
double tmp = quickMul(x , n/2); //从右到左一层层展开
return n % 2 == 0 ? tmp*tmp : tmp * tmp * x; //奇数则要额外乘X
}
double myPow(double x, int n) {
double result;
if (n >= 0)
result = quickMul(x, n);
else
result = 1.0 / quickMul(x, -n); //n为负,在倒数上操作
return result;
}
};
这题还有迭代算法,看的不是很懂没法复现