function f(n) {
if (n === 1) {
return 1
}
return n * f(n - 1)
}
f(3) // 6
//尾递归
function f(x) {
return g(x);
}
function f(x) {
if (x > 0) {
return m(x)
}
return n(x);
}
//以下两种都不是尾递归
function f(x) {
let y = g(x);
return y;
}
function f(x) {
return 1 + g(x);
}
//递归
//需要保存n条调用记录,复杂度为O(n)
function f(n) {
if (n === 1) {
return 1
}
return n * f(n - 1)
}
f(3) // 6
//尾递归
//只需调用最后一次调用记录,复杂度O(1)
function f(n, total) {
if (n === 1) {
return total
}
return f(n - 1, n * total)
}
f(3, 1) // 6