我遇到了一个解决指数问题的类,但我无法理解RaiseToPower()
方法是如何工作的。 这是我不理解的行:resultval=baseVal*raiseToPower(baseVal,exponentVal-1);
baseval
被乘以多少? raiseToPower(baseVal,exponentVal-1)
在我看来不像是一个表达式。 如果baseVal==2
,那么raiseToPower(baseVal,exponentVal-1)
是什么?
我知道如何解决2^3在我的头脑中,我很难理解baseVal*raiseToPower(baseVal,exponentVal-1)
所采取的步骤来解决这个问题。 我知道,每次调用RaiseToPower()
时,ExponentVal
都会减少1,但我仍然不明白它是如何保存一个可以乘以BaseVal
的值的。
我理解这个递归方法的行为就像一个循环。
public class ExponentMethod {
// calculates the result of raising a number to a power
public static int raiseToPower(int baseVal, int exponentVal) {
int resultVal; // holds the answer to the exponent problem
// sets resultVal to 1
if (exponentVal == 0) {
resultVal = 1;
}
else {
// calculate math problem
resultVal = baseVal * raiseToPower(baseVal,exponentVal-1);
}
// returns when exponentVal == 0
return resultVal;
}
public static void main (String [] args) {
int userBase;
int userExponent;
userBase = 2;
userExponent = 3;
System.out.println(userBase + "^" + userExponent + " = "
+ raiseToPower(userBase, userExponent));
}
}
// output
2^3 = 8
我知道有一个pow()方法用于将一个数字提高到幂
谢谢,
该方法使用递归将一个特定的基提升到一定的幂。
让我们举一个2^2的简单例子,并运行代码:
调用RaiseToPower(2,2)
resultval=2*raiseToPower(2,2-1)
正在运行
调用RaiseToPower(2,1)
resultval=2*raiseToPower(2,1-1)
正在运行
调用RaiseToPower(2,0)
点击基本大小写并返回1
现在我们回到链条上!
resultval=2*1
并且返回2
resultval=2*2
并且返回4
因此2^2的最终结果如预期的那样是4。
另一种思考方式是,假设有人已经给了你2^2的答案,你能用它来计算2^3吗? 是的,你可以简单地做2*2^2!
所以:raisePower(2,3)=2*raisePower(2,2)
重要的是,也有一个基本情况(当功率为0时,就像你上面的例子),这样我们就不会运行到无限循环! 希望这能帮上忙。
您遗漏的是,这是一个递归方法,它调用自己。 它继续这样做,在调用堆栈上存储中间结果,直到它开始返回,从堆栈中弹出那些值以形成答案。 有时,方法内的print语句可以帮助您查看正在发生的情况。
public static void main(String[] args) {
System.out.println(raiseToPower(3,4));
}
public static int raiseToPower(int baseVal, int exponentVal) {
if (exponentVal == 0) {
return 1;
}
int x = baseVal * raiseToPower(baseVal, exponentVal-1);
System.out.println("exponentVal = " + exponentVal + ", + x = " + x);
return x;
}
打印
exponentVal = 1, + x = 3
exponentVal = 2, + x = 9
exponentVal = 3, + x = 27
exponentVal = 4, + x = 81
81
当exponentVal==0时递归调用展开时,以下是您得到的结果
x = 1;
x = x * baseVal; // x = baseVal
x = x * baseVal; // x = baseVal ^ 2
x = x * baseVal; // x = baseVal ^ 3
x = x * baseVal; // x = baseVal ^ 4
// return x or 81
让我们举个例子,了解一下:
baseValue=2; 指数值=3;
如何计算幂(2,3),有以下几种方法: