递归函数
一个函数在它的函数体内调用它自身成为递归调用,这种函数称为递归函数。执行递归函数将反复调用自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层的由里向外退出。
递归函数:自我调用且有完成状态
递归的特点
- 函数自己调用自己
- 存在结束条件: 当符合结束条件时递归便不再继续。对于 factorial(),当形参 n 等于 0 或 1 时,递归就结束了。
- 存在递推关系: 每次递归调用之后越来越接近结束条件。对于 factorial(),每次递归调用的实参为 n - 1,这会使得形参 n 的值逐渐减小,越来越趋近于 1 或 0。
递归函数应该只进行有限次的递归调用,否则它就会进入死循环,永远都不能退出了,还会导致栈溢出。
递归实现1到100累加
// 思路
// 1、找出临界值,无需计算就能够得出的值。
// 2、找这一次和上一次的关系
// 3、假设这个函数已经写好,写出第n次和第n-1次的关系公式。
// sum(100) = sum(99) + 100;
// sum(n) = sum(n - 1) + n;
// 递归实现1到100累加
function sum(n) {
if (n == 1) {
return 1;
}
return sum(n - 1) + n; //递归调用
}
console.log(sum(100));