这是JavaScript中递归的一个例子吗?

时间:2017-08-14 23:48:47

标签: javascript variables recursion

我目前有点糊涂......我的任务是找到x的值,这是递归的一个例子吗?我不是要求x值的直接答案,我可以通过Overflow社区的一些指导找到它。我对a = b和b = t感到困惑,然后返回函数。

非常感谢任何和所有帮助!

function f(a, b, c) {
  if (c > 1) {
    c = c - 1;
    var t = a + b;
    a = b;
    b = t;
    return f(a, b, c);
  }
  return a + b;
}
var x = f(1, 3, 4);

4 个答案:

答案 0 :(得分:2)

是的,这是递归的一个例子。你可以这样说,因为函数f()在第7行调用了函数f()(本身)和一个较小的子集。

您可能会发现Microsoft的this documentation有帮助。

答案 1 :(得分:2)

是的,这一行:return f(a, b, c) - 这是递归,因为它在结束时调用自己。它正在修改它接收的参数并再次重新调用它自己。

答案 2 :(得分:2)

是的,f会自行调用,以便递归所需的所有内容。

此外,它是一个可以由引擎优化的尾递归,以避免调用堆栈变得过大。这是因为递归调用在调用之后不需要维护当前变量作用域。所有使用的变量都在参数位置使用,而不是在调用返回后使用,因此当前的堆栈帧可以在下次调用时重用。

现在没有太多的引擎针对正确的尾调用进行优化,但是它被添加为ECMAScript 2015的一个要求,因此他们应该最终到达那里。

答案 3 :(得分:0)

是的,它的递归,行返回f(a,b,c);在f函数内再次调用a,b,c

的新值