所以我正在制作的递归函数需要2个变量(x
和y
)并计算x
到y
的幂。就像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
。
显然这是错误的,因为正确答案不能是否定的。
答案 0 :(得分:2)
您的方法很好,但它对于太长的数字不起作用。
int
有4个字节(32位)=>最大值为2147483647
(2^31-1
),总计:2^32
值(也有一些负数)
long
有8个字节(64位)=>最大值为9223372036854775807
(2^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!