Java 计算任意指数的幂(负或正)
我想计算结果,给定任何负指数或正指数以及整数类型的基数。我正在使用递归:Java 计算任意指数的幂(负或正),java,recursion,Java,Recursion,我想计算结果,给定任何负指数或正指数以及整数类型的基数。我正在使用递归: public static double hoch(double basis, int exponent) { if (exponent > 0) { return (basis * hoch(basis, exponent - 1)); } else if (exponent < 0) { return ((1 / (basis * hoch(basis, ex
public static double hoch(double basis, int exponent) {
if (exponent > 0) {
return (basis * hoch(basis, exponent - 1));
} else if (exponent < 0) {
return ((1 / (basis * hoch(basis, exponent + 1))));
} else {
return 1;
}
}
如果指数为负,则返回1.0,但这是错误的。例如,hoch2,-2应为0.25。你知道什么地方不对吗?你的括号不对。您希望乘以递归调用的结果,而不是除以它;你希望你乘以的东西是1/basis,去掉一个负指数。你的括号是错误的。您希望乘以递归调用的结果,而不是除以它;你希望你乘以的东西是1/basis,去掉一个负指数
}else if(exponent < 0){
return ((1/(basis*hoch(basis, exponent+1))))
应该是
}else if(exponent < 0){
return (1/hoch(basis, -exponent));
应该是
}else if(exponent < 0){
return (1/hoch(basis, -exponent));
虽然更有效的递归解决方案是
public static double hoch(double basis, int exponent){
if(exponent == 0)
return 1;
else{
double r = hoch(basis, exponent/2);
if(exponent % 2 < 0)
return r * r / basis;
else if(exponent % 2 > 0)
return r * r * basis;
else
return r * r;
}
}
虽然更有效的递归解决方案是
public static double hoch(double basis, int exponent){
if(exponent == 0)
return 1;
else{
double r = hoch(basis, exponent/2);
if(exponent % 2 < 0)
return r * r / basis;
else if(exponent % 2 > 0)
return r * r * basis;
else
return r * r;
}
}
用hoch2,-2你实际上计算
1 / (-2 * (1 / (-1 * (1 / 1)))
<=> 1 / (-2 * (1 / (-1))
<=> 1 / (-2 * -1)
<=> 1/2
用hoch2,-2你实际上计算
1 / (-2 * (1 / (-1 * (1 / 1)))
<=> 1 / (-2 * (1 / (-1))
<=> 1 / (-2 * -1)
<=> 1/2
将底座提升至pos或neg底座的工作代码:
FUNC Raise_To_Power
LPARAMETERS pnBase, pnPow
DO CASE
CASE pnPow = 0
RETURN 1
CASE pnPow > 0
RETURN pnBase * Raise_To_Power(pnBase, pnPow-1)
CASE pnPow < 0
RETURN 1 / (pnBase * Raise_To_Power(pnBase, -(pnPow+1)))
ENDCASE
ENDFUNC
将底座提升至pos或neg底座的工作代码:
FUNC Raise_To_Power
LPARAMETERS pnBase, pnPow
DO CASE
CASE pnPow = 0
RETURN 1
CASE pnPow > 0
RETURN pnBase * Raise_To_Power(pnBase, pnPow-1)
CASE pnPow < 0
RETURN 1 / (pnBase * Raise_To_Power(pnBase, -(pnPow+1)))
ENDCASE
ENDFUNC
指数是多少?为什么不使用exponent-1如果不增加/减少指数,那么最终会出现堆栈溢出,我的意思是为什么不使用exponent+1?“指数”是什么意思?@Andreas_D,不,事实并非如此。由于下一个递归调用将使用正指数,因此它将被递减。n**-m与1/n相同**m@ArtWorkAD,n**-m与1/n**m的-指数是多少?为什么不使用exponent-1如果不增加/减少指数,那么最终会出现堆栈溢出,我的意思是为什么不使用exponent+1?“指数”是什么意思?@Andreas_D,不,事实并非如此。由于下一个递归调用将使用正指数,因此它将被递减。n**-m与1/n相同**m@ArtWorkAD,n**-m与1/n**m相同