【问题标题】:Find a number to the power of another number?找到一个数字的另一个数字的幂?
【发布时间】:2017-05-05 01:11:10
【问题描述】:

我正在尝试在 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

但不允许使用递归。

【问题讨论】:

  • 你可以使用递归函数吗?
  • 请在帖子中展示您尝试过的内容。
  • 如果您不能使用任何形式的循环或Math.pow,那么唯一的其他选择就是递归?
  • 使用很长的一系列if...elses。或者一个很长的switch...case 没有休息。或者你如何展示你试图不从我那里得到任何更荒谬的建议。
  • ^ 是 XOR 逻辑运算符,而不是“幂”。

标签: java math computer-science exponent


【解决方案1】:

无法调用 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
  • 是的,需要检查正指数。 if (exponent &lt; 0) throw something.
  • 基数应该是双数
【解决方案2】:

你可以简单地使用它

pow(x,y) = exp(y*log(x))

这也是数学库中幂函数实现的一部分。

【讨论】:

    【解决方案3】:

    递归可以帮助你:

    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的值。

    【讨论】:

    • 这个不错但是java支持尾调用优化吗?
    • 确实我没有检查,Java 不是我的主要语言。
    【解决方案4】:

    使用 for 循环:

    public static int power(a, b) { // a ^ b
      int p = 1;
      for (int i = 1, i <= b; i++)
        p *= a;
      return p;
    }
    

    【讨论】:

    • 我不能使用循环
    猜你喜欢
    • 2023-04-10
    • 2017-01-09
    • 2014-05-17
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多