每天一道算法题(24)——自定义幂函数pow
double myPower(double base, int exponent){ if(exponent==0) return 1; if(exponent==1) return base; if(exponent==-1)//当为是负数的情况 return 1.0/base; double result=1.0; result=myPower(base,exponent>>1); result*=result; if(exponent&1)//绝对值为奇数 result*=base; return result; }
1.使用了递归的思路。即将幂除2,在将结果平方的思路。对于幂为正奇数,右移位产生除即取下整数的结果,结果还要乘以一遍底数
2.对于幂为负奇数,右移也产生取下整数的效果。不同的是结果变小,即如-5>>1==-3,-7>>1==-4。因此,也得乘以一遍底数。
3.不管是正数还是负数,其补码与1相与都能判断其绝对值的奇偶.
4.-1的补码右移始终为-1,因此要添加嵌套终止条件
5.注意改函数对所有的底数指数的正负运算都适用