题目描述
实现函数double Power(double base, int exponent),求base的 exponent次方。
不得使用库函数,同时不需要考虑大数问题。
注意:
- 不会出现底数和指数同为0的情况
样例1
输入:10 ,2
输出:100
样例2
输入:10 ,-2
输出:0.01
问题分析
这道题是求快速幂,用递归来进行。每次把exponent除以2,然后把base的exponent/2次幂的结果赋给half变量,视exponent的不同情况来进行不同的计算。如果exponent是偶数,那么不管exponent是正数还是负数,算出half*half就是exponent次幂的值;当exponent是奇数且大于0时,在此基础上再乘一个base就可以了;而如果exponent是奇数且小于0,那么在此基础上要除以base。递归基是exponent等于0时,返回1。
代码实现
class Solution {
public:
double Power(double base, int exponent) {
if(exponent == 0)
return 1;
double half = Power(base, exponent / 2);
if(exponent % 2 == 0)
return half * half;
else if(exponent > 0)
return half * half * base;
else
return half * half / base;
}
};