我根据递归给出了初学者作业来计算任何给定基数和幂的乘积。
我的教授希望我们使用递归来使用三种不同的方法来计算它。 我已经完成了前两个问题,但是最后的递归功能让我感到悲痛。
(方法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;
}
答案 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;
}