最近我参加了一次采访,我被要求为(x ^ y)^ z 编写一个递归的java代码。
function power(x,y){
if(y==0){
return 1;
}else{
x*=power(x,y-1);
}
}
我可以管理x ^ y,但是在递归调用中也没有得到包含z的解决方案。 在询问提示时,他们告诉我,而不是在调用中有2个参数,你可以拥有一个包含2个值的数组。但即便如此,我还是得到了解决方案。你可以两种方式提出解决方案。
答案 0 :(得分:3)
这是我在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);
}
正如您所看到的,解决方案本身也是递归的,尽管定义了一个新功能(或重载了以前的功能)。
答案 1 :(得分:1)
迈克尔的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