尾递归优化(es6)
来源:互联网 发布:人工智能对人类的影响 编辑:程序博客网 时间:2024/05/20 00:48
function tco(f) { var value; var active = false; var accumulated = []; return function accumulator() { accumulated.push(arguments); if (!active) { active = true; while (accumulated.length) { value = f.apply(this, accumulated.shift()); } active = false; return value; } };}var sum = tco(function(x, y) { if (y > 0) { return sum(x + 1, y - 1) } else { return x }});sum(1, 100000)// 100001
tco函数是尾递归优化的实现,它的奥妙就在于状态变量active。默认情况下,这个变量是不激活的。一旦进入尾递归优化的过程,这个变量就激活了。然后,每一轮递归sum返回的都是undefined,所以就避免了递归执行;而accumulated数组存放每一轮sum执行的参数,总是有值的,这就保证了accumulator函数内部的while循环总是会执行。这样就很巧妙地将“递归”改成了“循环”,而后一轮的参数会取代前一轮的参数,保证了调用栈只有一层。
阅读全文
0 0
- 尾递归优化(es6)
- ES6尾递归优化的实现
- ES6尾递归
- js递归的优化(尾递归)
- 递归优化之尾递归
- 递归及尾递归优化
- 递归及尾递归优化
- 递归优化之尾递归
- ES6-函数的扩展-尾调用优化
- Python 尾递归优化
- 尾递归优化
- 尾递归优化【-O2】
- 【Scala】尾递归优化
- 尾递归优化
- 尾递归优化
- 尾递归优化
- javascript的递归、尾调用和蹦床函数: 各种解决方案的性能对比及Babel和ES6优化([翻译自外网博客]
- 什么是尾递归?javascript 尾递归优化
- [javaweb]jsp+servlet+mysql购书网站
- 在GTK+中实现嵌入式窗口
- 长风破浪会有时,直挂云帆济沧海
- react-router 路由控制页面跳转
- LeetCode||76. Minimum Window Substring
- 尾递归优化(es6)
- vim 如何快速复制多行
- 通过代理访问进行了安全性设置的服务
- linux双网卡绑定
- 我的javascript权威指南-6
- robots.txt SEO 与搜索引擎
- 指定数组同时指定要查找的数,找出这个数在数组中的起始位置和结束位置
- 一、正确姿势搭建maven+web项目
- 小波理解