Binary Search:50. Pow(x, n)

来源:互联网 发布:mac打开隐藏文件命令 编辑:程序博客网 时间:2024/05/29 16:31

这道题让我们求x的n次方。

我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数,对于n是负数的情况,我们可以先用其绝对值计算出一个结果再取其倒数即可。

class Solution {public:    double myPow(double x, int n) {        if(n < 0)   return 1/helper(x, -n);        else            return helper(x, n);    }    double helper(double x, int n)    {        if(n == 0)  return 1;        if(n % 2 == 0){            double half = helper(x, n/2);            return half * half;        }        else{            double half = helper(x, n/2);            return x * half * half;        }    }};