SOURCE

// 尾递归之前
function factorial(n) {
    if (n < 2) return 1
    return n * factorial(n - 1)
}

// 尾递归之后
function factorial1(n, total) {
    debugger
    if (n === 1) return total
    return factorial1(n - 1, n * total)
}


// console.log(factorial(5))
// console.log(factorial1(5, 1))

// 5 * 4 * 3 * 2 * 1
// 3

//  1, 2

// 1,1,2,3,5,8,13,21,34

function getFibo2(n, a1 = 1, a2 = 1) {
    if (n <= 2) return a2
    return getFibo2(n - 1, a2, a1 + a2)
}
var a = 1
function getFibo1(n) {
    a++
    if (n <= 2) return 1
    return getFibo1(n - 1) + getFibo1(n - 2)
}

// getFibo2(8, 13, 21)
// getFibo2(7, 8, 13)
// getFibo2(6, 5, 8)
// getFibo2(5, 3, 5)
// getFibo2(4, 2, 3)
// getFibo2(3, 1, 2)
// getFibo2(2, 1, 1)
// getFibo2(1, 1, 1)

// console.log(getFibo2(20)) // 21
// console.log(getFibo1(20)) // 21
// console.log(b)
// console.log(a)


function getFibo3(n) {
    let a1 = 0
    let a2 = 1
    let tem
    for(let index = 0; index < n; index++) {
        tem = a1
        a1 = a2
        a2 += tem
    }
    console.log(a1, a2)
}

getFibo3(5)
console 命令行工具 X clear

                    
>
console