相关疑难解决方法(0)

是否优化了任何Javascript引擎尾调用?

我有一个尾递归寻路算法,我已经在Javascript中实现,并想知道是否有任何(所有?)浏览器可能会得到堆栈溢出异常.

javascript functional-programming tail-recursion

90
推荐指数
4
解决办法
2万
查看次数

JavaScript的尾递归优化?

我向所有人道歉,因为以前版本的这个模糊不清.有人决定对这个新女孩表示同情并帮我改写这个问题 - 这是一个我希望能够解决问题的更新(并且,感谢迄今为止所有那些慷慨解答的人):


问题

我是Uni的第一年,我是一名新的计算机科学专业的学生.对于我的算法类的最终项目,我们可以选择我们想要的任何语言,并实现一种"细化"/"效率"算法,该算法在本地(内部?)用另一种语言找到,但在我们选择的语言中缺失.

我们刚刚在课堂上研究了递归,我的教授简要地提到JavaScript没有实现Tail Recursion.从我的在线研究中,新的ECMA脚本6规范包含此功能,但它目前不在任何(/大多数?)JavaScript版本/引擎中?(对不起,如果我不确定哪个是......我是新来的).

我的任务是为缺少的功能提供2个(编码)WORK AROUND的选项.

所以,我的问题是......是否有人,比我更聪明,更有经验,对我如何实现以下方面有任何想法或例子:

解决了缺乏尾递归优化?

javascript algorithm optimization recursion tail-recursion

10
推荐指数
3
解决办法
1716
查看次数

Javascript引擎中的尾部调用优化实现

截至2019年2月71.0.3578.98在Mac上的Chrome版本中,以下程序 Uncaught RangeError: Maximum call stack size exceeded error.的计数为16516

const a = x => {
  console.log(x)
  a(x + 1)
}

a(1)
Run Code Online (Sandbox Code Playgroud)

我已经做了很多Google搜寻工作,但找不到任何讨论Chrome或其他浏览器对尾部呼叫优化(TCO)支持或将来实现它的计划的文章。

我的两个问题是:

  1. Chrome或任何其他浏览器或Javascript引擎当前是否支持TCO
  2. 是否计划在不久的将来在任何JavaScript引擎中实施TCO

我发现的帖子大多是旧的(2016年或更早的版本)或令人困惑。例如https://www.chromestatus.com/feature/5516876633341952

javascript firefox v8 chromium

7
推荐指数
2
解决办法
1022
查看次数

为什么这个尾调用优化函数失败,最大调用堆栈大小超出错误?

此函数应该是尾调用优化.
据我所知,目前的浏览器(Chrome,甚至在Canary上尝试过)都应该对它进行优化,但是这次运行会出错:

function die(x, s) { 
  return x === 0 ? s : die(x-1, s+1);
}
die(100000, 0);
Run Code Online (Sandbox Code Playgroud)

错误:

VM369:1 Uncaught RangeError: Maximum call stack size exceeded

或者我弄错了什么?

javascript tail-recursion google-chrome ecmascript-6

5
推荐指数
1
解决办法
414
查看次数