实现一个尾调用?
尾调用优化的条件有两个主要要素:
-
尾调用: 调用发生在函数的最后,且是函数的最后一个操作。
-
无需保留当前函数的栈帧: 尾调用之后,当前函数的栈帧可以被丢弃,因为不再需要返回到当前函数。这可以通过一种称为“尾调用消除”(Tail Call Elimination)的优化实现。
如果一个函数的最后一个操作是调用另一个函数,调用自身,重用自身,尾调用,减少内存消耗和提高性能。
function fibonacci(n, a = 0, b = 1) {
if (n === 0) {
return a;
}
if (n === 1) {
return b;
}
return fibonacci(n - 1, b, a + b); // 尾调用
}