提升为指数的数字的递归解决方案

Recursion solution for a number raised to an exponent

本文关键字:数字 解决方案 递归 指数      更新时间:2023-10-16

嘿,我有一个问题,我必须用多种方法解决x^n。其中一个涉及到使用递归公式,这让我很难理解。因此,我对x^n使用递归的方法之一是n>=0

int power2(int base, int power){
if (power == 0)
return 1;
else if ( power == 1)
return base;
else 
return (base * power2(base, power - 1));
}

这对我来说是有意义的,所以当我设置X=2和N=4时,它降低了功率,它起到了计数器的作用,并将2x2的功率提高到3,4*2,功率提高到2,8*2=16。然后幂被提升到1,我有一个基本情况是,如果幂被提升为1,它只是返回基数。然而,对于我的下一个问题,我必须使用三个公式来解决它。

  • x0=1
  • 如果n是偶数=[xn/2]2
  • 如果n是奇数=x*[xn/2]2

所以到目前为止我拥有的是

int power3(int base, int power){
if(power == 0){
return 1;
}
else if ( power == 1)
return base;
// if power is even
if (power % 2 == 0){
return base*(power3(base,(power/2)));
}
// if power is odd
else{
return 0;
}
}

所以我只是想让偶数先起作用,当我设置x=2和n=4时,它会返回8。这对我来说是有道理的,因为当功率为4/2时,只有两次循环才能大于1。所以我真的在想办法让这个循环一次,同时保持我给出的公式。当我现在添加奇数基本情况时,程序将一直工作到n^5,但n^6返回32

您在解释公式时遇到了一个小问题
x^n if n is even = [x^n/2]2并不意味着:

base*(power3(base,(power/2))) //meaning x * [x^n/2]

宁愿你有

(power3(base,(power/2))) * 2

再看你的公式,它甚至不正确,应该是x^n if n is even = [x^n/2]^2

因此代码:

(power3(base,(power/2))) * (power3(base,(power/2)))

或:

(power3(base * base,(power/2)))

你的整个功能可能应该是这样的:

int power3(int base, int power){
if(power == 0){
return 1;
}
else if ( power == 1) // you don't really need this case,
return base;      // power == 0 is enough as base case
// if power is even
if (power % 2 == 0){
return (power3(base * base,(power/2)));
}
// if power is odd
else{
return base * (power3(base * base,(power/2)));
}
}

好吧,因为你似乎仍然对奇怪的力量感到困惑
您的power变量是int,因此您得到的整数除法意味着3/2=1而不是1.5(小数点后面的所有内容都会被截断)。

现在让我们来看看函数中的奇怪情况:

return base * (power3(base * base,(power/2)));

假设base == 4power == 5

return 4 * (power3(4 * 4,(5/2))); // 5/2 evaluates to 2

等于说return 4 * (power3(4, 5 - 1))然后返回CCD_ 8,因为我们现在得到了一个偶数情况。

我们基本上只做这两个步骤作为1。我觉得我的解释听起来有点奇怪,但希望能有所帮助。

相关文章: