我目前有点糊涂......我的任务是找到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);
答案 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
的新值