目录
什么是递归?
函数递归
在成熟的编程语言中,函数都支持递归调用,即函数递归,它指的就是函数内部调用自身,举个例子(JavaScript):
// 求1+2+3+...+n的值
function f(n){
if(n===1) return 1
return n + f(n-1)
}
在JavaScript执行引擎中,每次函数调用都会创建一个函数执行上下文(栈帧),并推入执行栈(栈内存)中,当函数调用结束,则对应函数执行上下文从执行栈中出栈。
假设我们执行f(3),则上面程序运行时栈内存最大占用时如下:
我们发现,若函数发生递归调用,则外层函数必须要等待内层函数递归调用结束,自身的调用才能结束。
所以正确的函数递归需要:
- 具备出口条件(递归结束条件)
- 具备朝向出口的递归方向