递归函数使用尾递归优化
尾调用:是指函数内部的最后一个动作是函数调用。该调用的返回值,直接返回给函数
尾递归:把当前的运算结果(或路径)放在参数里传给下层函数,深层函数所面对的不是越来越简单的问题,而是越来越复杂的问题,因为参数里带有前面若干步的运算路径。
es6 尾调用只在开启严格模式才生效
//斐波那契数列 'use strict' function Fib(n, n1 = 0, n2 = 1) { if(n == 0) { return n1 } return Fib(n - 1, n2, n1 + n2) }
// 阶乘 'use strict' function factorial(n, res = 1) { if (n == 1) return res; return factorial(n - 1, n * res) }
补充: 由于浏览器没有部署尾调用优化,所以在浏览器中实际还是会出现栈溢出的情况