使用尾调用避免堆栈溢出的递归

122 阅读1分钟
    // 尾调用优化前
    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) // 不会产生堆栈溢出