![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 class Solution { 2 public: 3 double _pow(double x,int n) 4 { 5 if(n==0) 6 return 1; 7 double tmp=_pow(x,n/2); 8 return (n%2==0)?(tmp*tmp):(tmp*tmp*x); 9 } 10 double myPow(double x, int n) { 11 return (n>=0)?_pow(x,n):(_pow(1/x,-n)); 12 } 13 };
这道题有个小陷阱,就是代码中必须用(n%2==0)来判断而不能用(n%2==1)来判断。
因为n=-2147483648时,-n=-2147483648,如果用(n%2==1)来判断,在递归的时候会遇到某些负奇数,它们应该算是归类到(n%2==1)的那一类,但由于负奇数%2==-1, 所以会造成不正确的判断。而(n%2==0)则没有这个问题。