这是如何递归的(一遍又一遍地重复)?
function power(base, exponent) {
if (exponent == 0)
return 1;
else
return base * power(base, exponent - 1);
}
console.log(power(2, 3));
// → 8
答案 0 :(得分:1)
该函数调用自身,因此它是递归的。
答案 1 :(得分:0)
递归是"以自我相似的方式重复项目的过程"。
想象一下,如果你是在美发师或理发店看着你面前的镜子,在镜子里,你会看到自己的反射,以及房间的另一面也有镜子,在另一边的镜子里,你看到自己看着另一边的镜子,看着另一边的镜子,等等,无限期地。
简而言之,您的函数是递归的,因为它会在exponent
为0
之前调用自身。
答案 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。