提问者:小点点

了解一个方法如何计算一个乘幂的数字


我遇到了一个解决指数问题的类,但我无法理解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()方法用于将一个数字提高到幂

谢谢,


共3个答案

匿名用户

该方法使用递归将一个特定的基提升到一定的幂。

让我们举一个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),有以下几种方法:

  1. BaseValue^ExponentialValue----2^3=8
  2. BaseValue x BaseValue^ExponentialValue-1-----2x2^2=8