Problem:实现幂运算即 pow(x,n)
设形式为pow(x,n) = x^n,则有一下分支:
当x==0时,返回0
当n==0时,返回1
当n<0时,(此时需要注意,不能直接将n = -n,因为最小负数变为相反数之后会超过int的最大范围)
需要判断if( n == Integer.MIN_VALUE) 先对n++ 然后n = -n ; x = 1/x; return x * x * myPow( x*x, n/2 );//这里乘以两个x
else n = -n; x = 1/x;
最后结果 return (n%2==0)? myPow(x*x,n/2):x*myPow(x*x,n/2);
参考代码:
package leetcode_50; /*** * * @author pengfei_zheng * 实现幂运算 */ public class Solution50 { public static double myPow(double x, int n) { if(x==0) return 0; if(n==0) return 1; if(n<0){ if( n == Integer.MIN_VALUE){ ++n; n = -n; x = 1/x; return x * x * myPow( x*x, n/2 ); } n = -n; x = 1/x; } return (n%2==0)? myPow(x*x,n/2):x*myPow(x*x,n/2); } public static void main(String[]args){ System.out.println(myPow(9,100)); } }