简单的Java power递归

时间:2014-09-14 16:44:57

标签: java recursion int long-integer

所以我正在制作的递归函数需要2个变量(xy)并计算xy的幂。就像Math.pow函数一样。 y是积极的,所以我不需要担心负面的指数。 这是我的代码:

public static int power(int x, int y) {     
    if (y == 0)         
        return 1;           
    else        
        return x * power(x, y-1);
}

起初它似乎工作正常,但后来我尝试输入power(50,6)。我得到了-1554869184。 显然这是错误的,因为正确答案不能是否定的。

1 个答案:

答案 0 :(得分:2)

您的方法很好,但它对于太长的数字不起作用。

int有4个字节(32位)=>最大值为21474836472^31-1),总计:2^32值(也有一些负数)

long有8个字节(64位)=>最大值为92233720368547758072^63-1),总计:2^64

可以使用以下命令在Java中找到这些值:

Integer.MAX_VALUE     // Integer and int have the same range
Long.MAX_VALUE        // Long and long have also the same range

对于您的情况: 50^6 = 15625000000是有效的long号码,但不是有效的int(它大于2^32-1

小心:

如果您尝试使用较长的数字,也可能会遇到long的问题。 E.g:

power(10,18);  // OK
power(10,19);  // not OK: negative number
power(10,20);  // not OK: even if the number is positive
               //         the answer is not good - it has only 18 digits!