先看一个最简单的累加的递归函数:
1 function sum(n){ 2 if(n <= 1) return 1 3 return n + sum(n - 1) 4 } 5 console.log(sum(100)); // 5050
当传入的参数过大时会导致栈溢出:
即:超过了最大调用堆栈大小
那这是如何导致栈溢出的呢?这里需要知道正常我们写的JS代码是如何来运行的,可以参考另一篇博客:JS调用栈和队列
大致就是执行到哪个方法,那个方法就压入栈中,函数执行结束就从栈中移除。
那么,递归执行时调用栈是如何变化的呢?
就以上面哪个累加的递归函数为例,如传入的参数是5,就以一个图表展示:
说明:
解决递归的调用栈溢出可以使用尾调用优化。
原文:https://www.cnblogs.com/codexlx/p/14339055.html