// 尾递归之前
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