使用递归以不同方式计算幂

时间:2014-04-01 18:30:26

标签: java math recursion

我根据递归给出了初学者作业来计算任何给定基数和幂的乘积。

我的教授希望我们使用递归来使用三种不同的方法来计算它。 我已经完成了前两个问题,但是最后的递归功能让我感到悲痛。

(方法power4)

•如果n> 0且n为偶数,则X ^ n =(X ^(n / 2)^ 2

•如果n> 0且n为奇数,则X ^ n = X *(X ^(n / 2)^ 2

我需要做的就是将power4(x,(n / 2))提高到2的幂

我不被允许打电话给数学课......无论如何我都无法想到将这个功能提升到2的力量,任何帮助都会非常感激。

PS:如果可能的话,我更愿意提供帮助或解释,而不仅仅是答案 感谢。

我只需要帮助方法power4,power2和power3已经正常工作了。 代码:

    public int power2(int x, int n)
{
    if(n == 0)
        answer = 1;

    else if (n > 0)
        answer = x * power2(x, (n - 1));

    return answer;
}

public int power3(int x, int n)
{
    if(n == 0)
        answer = 1;

    else if(n % 2 == 0)
        answer = power3(x, (n/2)) * power3(x, (n/2));

    else
        answer = x * power3(x, (n/2)) * power3(x, (n/2));

    return answer;
}

public int power4(int x, int n)
{
    if(n == 0)
        answer = 1;

//incomplete code from here down
    else if (n % 2 == 0)
        answer = 

    else
        answer = x * 

    return answer;      
}

2 个答案:

答案 0 :(得分:0)

将一个值提升为2的幂,a.k.a。将其平方,只需将其自身相乘即可。但是,不要将两个递归调用乘以该函数 - 执行类似

的操作
result = power4(x, n/2);
answer = result * result;

然后,如果它是奇数,则将answer乘以x

如果您尝试以answer = power4(x, n/2) * power4(x, n/2);的方式执行此操作,则可以通过调用函数两次将递归的每个级别的工作量加倍,并完全撤消对数运行时间。

顺便说一下,你确定你的一个案例不应该基于 x n =(x 2 n / 2 x n = x *(x 2 n / 2 分别为n偶数还是奇数?正如您所描述的那样,看起来power3和power4是相同的。

答案 1 :(得分:0)

这有助于提升2的力量:

int answer = 0;
for (int i = 0; i < x; i++)
{
    answer += x;
}