我遇到了一个解决指数问题的类,但我无法理解方法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()方法可以将一个数提升到幂
谢啦
5条答案
按热度按时间rjjhvcjd1#
该方法使用递归将特定的基数提升到一定的幂。
让我们举一个简单的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
,返回2resultVal = 2 * 2
,返回4所以2^2的最终结果是4,正如预期的那样。
另一种思考方式是假设有人已经给了你2^2的答案,你能用它来计算2^3吗?是的,你可以简单地计算2 * 2^2!
所以:
raisePower(2,3) = 2 * raisePower(2,2)
还有一点很重要,那就是要有一个基本情况(当power为0时,就像你上面的例子一样),这样我们就不会陷入无限循环!希望这对你有帮助。
mbskvtky2#
你所忽略的是,这是一个递归方法,它会调用自己。它会继续这样做,将中间结果存储在调用堆栈上,直到它开始返回,从堆栈中弹出这些值以形成答案。有时,方法中的print语句可以帮助你看到发生了什么。
印刷品
当exponentVal == 0时,递归调用展开,得到的结果如下
4jb9z9bj3#
让我们举个例子并理解:
return 2;return 3;
我们如何计算pow(2,3),有几种方法:
5kgi1eie4#
它被称为递归。同样的函数被递归调用,指数每次递减,乘以基值并添加到结果中。它将像这样运行:
kqlmhetl5#
我在解决这个问题时遇到了同样的问题。直接修复“// calculate math problem”行是: