我正在尝试在java中编写一个函数,该函数查找操作数的结果被提升到另一个的权力。
我无法使用pow功能或任何形式的循环。有什么可能的解决方案?我试过" ^"那不起作用。
public static String raiseP(int op1, int op2){
int result = op1 ^ op2; //Doesn't Work
return result;
}
使用基本数学有没有办法做到这一点?
我写道:
public static int pow(int x, int y, int n, int z){
if (y == n){
System.out.println(z);
return z;
}
else{
z = z*x;
n += 1;
pow(x,y,n,z);
return 0;
}
}
ex: pow(5,9,0,1) == 5^9
但不允许使用递归。
答案 0 :(得分:3)
无法调用Math.pow或使用循环,唯一的另一种可能是使用递归:
public int powerFunction(int base, int exponent) {
if(exponent < 0){ throw new IllegalArgumentException("unsupported negative pow"); }
if(exponent == 0){ return 1; }
else{
return base * powerFunction(base, exponent - 1);
}
}
致电powerFunction(2, 3)
会给您:1 * 2 * 2 * 2 = 8
答案 1 :(得分:1)
你可以简单地使用
pow(x,y) = exp(y*log(x))
这也是数学库中幂函数实现的一部分。
答案 2 :(得分:0)
递归可以帮助你:
public static int myPowerRec(int op1, int op2, int res) {
if (op2 == 0) {
return res;
}
else {
return (myPowerRec(op1, op2 - 1, op1 * res));
}
}
您需要将res初始化为1(myPowerRec(23, 2, 1)
将为您提供1 * 23 * 23
)。
此递归称为tail recursion,允许您在没有堆栈问题的情况下使用此函数。
请注意,您必须先检查op2
值。
答案 3 :(得分:0)
使用for循环:
public static int power(a, b) { // a ^ b
int p = 1;
for (int i = 1, i <= b; i++)
p *= a;
return p;
}