递归函数
递归函数
什么是递归?
递归函数就是在函数内部,直接或者间接调用自己
1 |
|
递归调用方式有几种?
- 直接调用
1
2
3
4
5
6
7function func(let n) {
if (n === 1) {
return n;
}
// 自己调用自己
return func(n - 1) * n;
} - 间接调用
1
2
3
4
5
6
7function fun1(a) {
let b = fun2(a + 1);
}
function fun2(s) {
let c = fun1(s - 1);
}
如何设计递归函数?
- 递归函数,必须要有一个结束条件
- 在递归中,一个问题可以被分解为多个子问题,子问题是父问题的实例,可以用相同的方法解决
- 在递归中,每次递归都要向结束条件靠拢
- 递归函数,每次递归都需要有一个返回值,并且用递归的值来计算
递归函数有什么缺点?
- 空间效率低,每次函数进行递归,都会创建一个新的函数实例
- 可能导致栈溢出,递归次数越多,内存消耗越大
- 递归可能会重复计算,子问题基本相同
如何优化递归函数?
- 使用尾递归
- 循环代替递归
- 使用动态规划/记忆化技术
递归函数
http://yulinling.asia/2024/03/20/递归函数/