// 尾调用优化前
const fib = (n) => {
if(n <= 1) {
return 1;
};
return fib(n -1) + fib(n - 2);
};
fib(10) // 89
fib(1000) // 堆栈溢出
// 尾调用优化后
const fib = (n, a = 1, b = 1) => {
if(n <= 1) {
return 1;
};
return fib(n -1, b, a + b);
};
fib(1000) // 不会产生堆栈溢出