如何获得任何数字的Nth Power

时间:2011-07-06 06:00:41

标签: java puzzle

我接受了采访。在那里我被问到以下问题

用任何编程语言编写函数,使用+ *或^计算数字的n次幂,或在函数内声明新变量或使用任何库函数(例如java中的Math lib)

我使用了java Math.pow(a, b)

的pow函数

由于

4 个答案:

答案 0 :(得分:3)

他们问你是否理解递归。考虑某个整数k的x ^ k,

  • 当k < 0,x k = x k + 1 / x
  • 当k = 0时,x k = 1
  • 当k> 0,x k = x k-1 * x

把它变成代码不应该太糟糕。我们现在使用乘法,稍后再把它取出来。

double recursivePower(double x, int k) {
    if (k < 0) {
        return power(x, ++k) / x;
    } else if (k == 0) {
        return 1;
    } else {
        return power(x, --k) * x;
    }
}

现在,摆脱乘法。由于n * m = n /(1 / m),我们可以将最后一次计算重写为power(x, --k) / (1/x)

double recursivePower(double x, int k) {
    if (k < 0) {
        return recursivePower(x, ++k) / x;
    } else if (k == 0) {
        return 1;
    } else {
        return recursivePower(x, --k) / (1 / x);
    }
}

分数指数可能以相同的方式完成。如果他们想要以相同的方式处理非理性的指数,我会要求谷歌和相当多的时间来思考这个问题。

答案 1 :(得分:0)

static public int power(int value, int pow){
    if(pow == 0) return 1;

    return value * power(value, pow -1);
}

答案 2 :(得分:0)

在JavaScript中完成:

function power(num,pow){
  if (pow == 0) return 1
  num /= 1/(power(num,--pow))
  return num
}

称之为:

power(2,0) // -> 1
power(5,2) // -> 25
power(7,3) // -> 343

我觉得反分裂是在欺骗no *运算符规则,但是,也许这就是他们正在寻找的东西。

答案 3 :(得分:-2)

我使用的是java编程语言。面试官限制您在方法中声明一个新变量,将其传递给函数。面试官并没有限制你使用除法运算符(/),所以你可以使用它。

static double getNthPowerOfNumber(double originalNumber,
        int power) {


    if (power == 0) {
        return 1;
    }
    if (originalNumber == 0) {
        return 0;
    } else {
        originalNumber/=1/getNthPowerOfNumber(originalNumber, --power);

        return originalNumber;
    }



}

如果你想获得数字3的5次幂,那么写System.out.println("4..double..." + getNthPowerOfNumber(4, 1));