剑指offer-16 数值的整数次方

题目:

给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。

解题思路:

下面的讨论中 x 代表 base,n 代表 exponent.

因为 (x*x) 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。

public double Power(double base, int exponent){
		if(exponent == 0)
      return 1;
  	if(exponent == 1 )
      return base;
  	boolean isNegative = false; 
  	if(exponent < 0){
    		exponent = -exponent;
      	isNegative = true;
    }
  	double pow = Power(base * base, exponent / 2);
  	if(exponent % 2  != 0)
      pow = pow * base;
   	return isNegative ? 1 / pow : pow ;
}
posted @ 2019-05-06 16:38  创造的艺术  阅读(118)  评论(0编辑  收藏  举报