Implement pow(x, n).
解答: 这道题其实不难,主要用到除以二,然后递归, 值得注意的有两点 1.奇数除以二和奇数减一除以二是等价的,所以无需减去1. 2.要用边界终止条件 if(n==0) return 1; 而非 if(n==1) return x; 因为假如n为INT_MIN,那么-n就超出最大的int值了,我们打印出来发现,-n输入进去后还是-2147483648,并没有变正,也就是说,后面是一个负的值一直除以二。所以不会收敛到1,而是0
class Solution { public: double myPow(double x, int n) { if(x==0||x==1) return x; if(n==0) return 1; int a=-2147483648; cout<<a; if(n>0) return powcal(x,n); else return 1 /powcal(x,-n); } double powcal(double x,int n) { if(n==1) return x; if(n==0) return 1; double result=powcal(x,n/2); if(n%2==0) { return result*result; } else { return result*result*x; } } };