什么是尾递归
尾递归指的是在递归函数时,在return
时调用起另外一个函数
代码执行是基于执行栈的,所以当在一个函数里调用另外一个函数时,会保留当前函数上下文,在新建一个执行上下文加入到栈中
如果是采用尾递归方式,在最后返回的时候可以不保留当前执行上下文,达到节省内存优化,也就是常说的尾递归优化
js
// 尾递归
function foo(n){
if(n>10) return n
return foo(n+1)
}
但是不建议使用尾递归,因为不方便后续debugger,而且ES6中默认尾递归是无效的 在V8中尾递归优化功能已经被移除了,也是因为尾递归会破坏函数的调用栈信息 proposal-ptc-syntax