在js函数式编程中由一个尾递归的问题。http://es6.ruanyifeng.com/#do...尾调用优化function fibonacciTail(n, a = 0, b = 1) { if (n === 0) return a return fibonacciTail(n - 1, b, a + b)}可以是实现尾递归优化的一个典型例子,在这里,每次调用后递归传入 fibonacciTail 函数的 n 会依次递减 1,它实际上是用来记录递归剩余的次数。而 a 和 b 两个参数在每次递归时也会在计算后再次传入 fibonacciTail 函数,写成调用栈的形式就很清楚了:可以看到,每次递归都不会增加调用栈的长度,只是更新当前的堆栈帧而已。也就避免了内存的浪费和爆栈的危险。(以上是摘抄的)同样类似的一个例子function sum(x, y) { if (y > 0) { return sum(x + 1, y - 1); } else { return x; }}sum(1, 100000)为什么会爆栈呢?为什么不可以类推成这个函数内部函数并未引用外层函数的内部变量,两个变量x,y均为引用外部变量。 问题的关键难道是 return x返回的不是一个尾调函数么?
添加回答
举报
0/150
提交
取消