0

最近我参加了一次面试,我被要求为(x^y)^z编写一个递归 Java 代码。

function power(x,y){

if(y==0){
   return 1;
}else{
  x*=power(x,y-1); 
}
}

我可以为 x^y 做到这一点,但没有得到将 z 也包含在递归调用中的解决方案。在寻求提示时,他们告诉我,您可以拥有一个包含 2 个值的数组,而不是在调用中使用 2 个参数。但即便如此,我也无法得到解决方案。你能建议一个解决方案吗?

4

2 回答 2

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);
}

如您所见,尽管定义了一个新函数(或重载之前的函数) ,解决方案本身也是递归的。

于 2013-09-26T09:04:25.530 回答
1

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

于 2013-09-26T09:13:36.393 回答