这是如何递归的

时间:2014-04-19 23:39:16

标签: javascript

这是如何递归的(一遍又一遍地重复)?

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

console.log(power(2, 3));
// → 8

3 个答案:

答案 0 :(得分:1)

该函数调用自身,因此它是递归的。

答案 1 :(得分:0)

递归是"以自我相似的方式重复项目的过程"。

想象一下,如果你是在美发师或理发店看着你面前的镜子,在镜子里,你会看到自己的反射,以及房间的另一面也有镜子,在另一边的镜子里,你看到自己看着另一边的镜子,看着另一边的镜子,等等,无限期地。

简而言之,您的函数是递归的,因为它会在exponent0之前调用自身。

答案 2 :(得分:0)

反复重复不是递归,即迭代。该函数是递归的,因为它调用自身。

然而,这是递归的一个非常糟糕的例子。它基本上只是一个用来代替使用递归的循环,它执行得很糟糕并且占用了大量的堆栈空间。

更好的方法来显示如何正确使用递归它将工作分成两半,并使用一个递归调用来解决每一半:

function power(base, exponent) {
  if (exponent == 0) {
    return 1;
  } else {
    var n = Math.floor(exponent / 2);
    return power(base, n) * power(base, exponent - n);
  }
}

当使用例如100的指数调用时,这将执行深度为7的递归调用,而不是深度为100。