我接受了采访。在那里我被问到以下问题
用任何编程语言编写函数,使用+ *或^计算数字的n次幂,或在函数内声明新变量或使用任何库函数(例如java中的Math lib)
我使用了java Math.pow(a, b)
由于
答案 0 :(得分:3)
他们问你是否理解递归。考虑某个整数k的x ^ k,
把它变成代码不应该太糟糕。我们现在使用乘法,稍后再把它取出来。
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));