我有一个尾递归的路径查找算法,已经用JavaScript实现了。我想知道是否所有浏览器都有可能出现堆栈溢出异常。
我有一个尾递归的路径查找算法,已经用JavaScript实现了。我想知道是否所有浏览器都有可能出现堆栈溢出异常。
ECMAScript 4 规范最初计划添加对TCO的支持,但后来被放弃了:
截至2010年,目前没有广泛可用的 JavaScript 实现自动 TCO。
请查看评论以获取更近期的更新。
目前还没有喜讯,但幸运的是“正确的尾调用”已被列入 Harmony(ECMAScript版本6)计划。
http://wiki.ecmascript.org/doku.php?id=harmony:proper_tail_callsnode -e 'function x() { x() }; x()'
。 - Brian McCutchon目前没有JavaScript实现支持尾递归。在ECMAScript 6中正在进行更改,正如其他人所说,V8上有一个未解决的问题。
在这里,您可以看到V8针对尾递归函数生成的汇编程序:
与Clang编译C语言中相同函数的方式进行比较
V8保留了递归调用,而C编译器已经识别出尾递归并将其转换为循环。