有人可以解释这段代码吗? - C ++

时间:2012-02-19 16:19:07

标签: c++ recursion

  

可能重复:
  Using Recursion to raise a base to its exponent - C++

int raisingTo(int base, unsigned int exponent)
{
   if (exponent == 0)
    return 1;
   else
    return base * raisingTo(base, exponent - 1);
}

我编写了这段代码,用于使用main()中的值传递的值将指数提升到其基值。此函数使用递归来执行此操作。有人可以解释每次调用自身时它是如何返回值的吗?我需要详细解释这段代码。

2 个答案:

答案 0 :(得分:4)

我们使用等式:x^n = x * x^(n-1),对于所有实数都是如此。

因此我们使用它来创建递归函数。递归的底部是当指数== 0时。

例如2^4 = 2 * 2^3; 2^3 = 2 * 2^2; 2^2 = 2 * 2^1; 2^1 = 2 * 2^02^0 = 1

答案 1 :(得分:0)

最好通过手动进行迭代来说明(如评论中所示)。假设我们有base = 2exponent = 2

  • 在第一次迭代期间,函数返回2 * (whatever function yields when called with the arguments 2 and (2 - 1), which is 1)
  • 参数2和1的第二次迭代得到结果2 * (whatever the next iteration with arguments 2 and 0 returns)
  • 由于函数设置为当指数为0时返回1,所以thrid迭代也将是最后一次。

现在我们有完整的链2 * 2 * 1,因此计算结果是4。