- 递归函数:就是在函数内部,调用函数本身,是函数的一种高级应用
- 如果递归函数的执行不能结束,就会造成死递归
- 死递归会报错:
Maximum call stack size exceeded
- 递归函数的书写:
- 根据递进关系,在函数内调用函数本身
- 在合适的位置,书写递归函数的折返点(递进的结束条件)
- 递归优化:尾递归
- 在函数的最后完成递归调用
- 需要递进计算的数据通过函数参数进行传递
案例1
var n = 1
function fn() {
console.log(n)
fn()
}
fn()
案例2
function getJc(n) {
if (n === 1) return 1
return n * getJc(n - 1)
}
console.log(getJc(5))
function getJC(n, total = 1) {
if (n === 1) return total;
return getJC(n - 1, n * total);
}
console.log(getJC(5));
案例3
function getSum(n) {
if (n === 1) return 1
return n + getSum(n - 1)
}
console.log(getSum(100))
案例4
function getFeiBo(n) {
if (n === 1 || n === 2) return 1
return getFeiBo(n - 1) + getFeiBo(n - 2)
}
console.log(getFeiBo(11))
console.log(getFeiBo(50))
function getFei(n, prev = 1, total = 1) {
if (n === 1) return prev;
return getFei(n - 1, total, prev + total);
}
console.log(getFei(11));
console.log(getFei(50));