Implement pow(x, n).
题目意思: 题目意思很简单,让我们实现一个幂函数,也就是给出 x 和n,返回 xn .
解题思路: 幂函数是什么我们都很清楚, xn 表示n个x相乘的结果,最简单粗暴的方法就是写一个循环来将n个x乘起来,但这是低效的,而且这种方法在Leetcode上提交也不会通过。但是,对于n个x,如果我们把这些x分成两部分。
x∗x∗⋯∗xpart1:n2个x∗x∗x∗⋯∗xpart2:n2个x 从上面的式子可以看出,实际上,我们只需要计算一次第一部分的n个x的乘积,后半部分就不用算了,也就是 xn=(xn2)2 按照这中方法,我们可以递归地一直把这些x划分成2部分,每一部分又划分成2部分……直到只剩下1个或0个x,这样就可以开始返回。代码:
class Solution { public: double myPow(double x, int n) { if (n < 0) { x = 1 / x; n = -n; } if (n == 0) return 1; else if (n == 1) return x; double half = myPow(x, n / 2); double result; if (n % 2 == 0) result = half * half; else result = half * half * x; // 判断result是否inf,如果是就返回0,否则返回result的值 return result + 1 == result - 1 ? 0 : result; } };