铺垫
函数的调用会在内存中形成一个调用记录,也称作“调用帧”,用来保存调用位置和内部变量等信息。内存中用一个栈结构来保存调用帧,也称“调用栈”。函数被调用时调用帧入栈,函数返回时调用帧弹栈。
当发生函数的嵌套时,如在A函数中调用B函数,就会有连续的两个调用帧入栈
function A(){
...
B();
...
}
当B函数返回时,B调用帧弹栈,继续执行A函数,当A函数返回时,A调用帧弹栈
递归函数就是在函数内部不断调用自身,直到满足特定条件
递归函数的缺点
递归函数在函数内部不断调用自身,导致调用栈快速增大,这是很浪费内存资源的,而且调用栈都是有固定大小的,如果递归次数过多会造成栈溢出错误
递归函数优化--尾递归
什么是尾调用?
很简单,就是指某个函数的最后一步操作是调用另一个函数
//js
function A(x){
...
return B(