递归调用x power y power z

时间:2013-09-26 08:58:10

标签: recursion

最近我参加了一次采访,我被要求为(x ^ y)^ z 编写一个递归的java代码。

function power(x,y){

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

我可以管理x ^ y,但是在递归调用中也没有得到包含z的解决方案。 在询问提示时,他们告诉我,而不是在调用中有2个参数,你可以拥有一个包含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