问题描述

https://leetcode.com/problems/powx-n/#/description

Implement pow(x, n).

实现pow(x,n),及实现幂运算。

算法分析

这个题目的难度是中等,所以如果用显而易见的那个O(n)算法,即直接循环n次,将nx乘起来的话是肯定会超时的,所以,只能用递归分治算法,即一次只乘一半,设值为A,即当n为偶数时,结果是A*A;当n为奇数时,结果为A*A*x;当然,如果n为负数,则计算倒数即可。

例:

1. 计算pow(2, 4)

A = pow(2,2)
return A*A

2. 计算pow(2, 5)

A = pow(2, 5/2) = pow(2, 2)
return A * A *x

代码

public double myPow(double x, int n) {
    if(n==0) return 1;
    if(n==1) return x;
    if(n==-1) return 1.0/x;
    double tmp = myPow(x, n/2);
    if(n%2==0) {
    	return tmp*tmp;
    }
    if(n>0) {
    	return tmp*tmp*x;
    }
    return tmp*tmp/x;
}