最近我参加了一次面试,我被要求为(x^y)^z编写一个递归 Java 代码。
function power(x,y){
if(y==0){
return 1;
}else{
x*=power(x,y-1);
}
}
我可以为 x^y 做到这一点,但没有得到将 z 也包含在递归调用中的解决方案。在寻求提示时,他们告诉我,您可以拥有一个包含 2 个值的数组,而不是在调用中使用 2 个参数。但即便如此,我也无法得到解决方案。你能建议一个解决方案吗?
最近我参加了一次面试,我被要求为(x^y)^z编写一个递归 Java 代码。
function power(x,y){
if(y==0){
return 1;
}else{
x*=power(x,y-1);
}
}
我可以为 x^y 做到这一点,但没有得到将 z 也包含在递归调用中的解决方案。在寻求提示时,他们告诉我,您可以拥有一个包含 2 个值的数组,而不是在调用中使用 2 个参数。但即便如此,我也无法得到解决方案。你能建议一个解决方案吗?
这是我将在 python 中使用的解决方案,但您也可以轻松地用 javascipt 或任何其他语言完成它:
def power(x, y):
if y == 0:
return 1
if y == 1:
return x
return x * power(x, y - 1)
def power2(x, y, z):
return power(power(x, y), z)
然后,您可以使用 power2 返回结果。在另一种语言中,您可能会重载相同的函数,但我认为在 Python 中对于这种情况是不可能的。
对于您的 javascript 代码,您真正需要添加到解决方案中的只是第二个函数,如下所示:
function power2(x,y,z)
{
return power(power(x, y), z);
}
如您所见,尽管定义了一个新函数(或重载之前的函数) ,解决方案本身也是递归的。
Michael 的 Java 语言解决方案
public void testPower()
{
int val = power(2, 3, 2);
System.out.println(val);
}
private int power(int x, int y, int z)
{
return power(power(x, y), z);
}
private int power(int x, int y)
{
if (y == 0)
{
return 1;
}
if (y == 1)
{
return x;
}
return x * power(x, y - 1);
}
输出为 64