【发布时间】:2016-09-21 13:25:35
【问题描述】:
我不想在 node/es2015 中使用尾调用优化,但我不断收到RangeError: Maximum call stack size exceeded。于是我尝试了一个很简单的测试函数:
function countTo(n, acc) {
if(n === 0) {
return acc;
}
return countTo(n - 1, acc + n);
}
console.log(countTo(100000 , 0))
它仍然失败。我尝试在函数体内和文件顶部添加'use strict';。我试过使用--harmony 和--harmony-tailcalls
同样的功能在球拍中按预期工作:
#lang racket
(define count-to
(lambda (n acc)
(cond
((= n 0) acc)
(else (count-to (- n 1) (+ acc n))))))
(count-to 100000000 0)
; ~> 5000000050000000
编辑:
正如@MatthieuLemoine 建议的那样。它在 v6.5.0+ 中使用 "use strict"; 和 --harmony 或 --harmony-tailcalls
【问题讨论】:
标签: javascript node.js recursion ecmascript-6