javascript - JavaScript 尾递归超过最大调用堆栈
问题描述
在 OS X 10.13 (High Sierra) 上的 node.js v8.5 上运行时,以下函数超出了最大调用堆栈
"use strict";
function sum_multiples(i, max, sum){
if(i >= max) return sum;
return ((i%3 === 0) || (i%5 === 0)) ? sum_multiples(i+1, max, sum+i) : sum_multiples(i+1, max, sum);
}
console.log(sum_multiples(1, 1000, 0));
是否应该采用不同的结构以避免超出调用堆栈,或者是正在使用的引擎的问题?
使用while
orfor
循环不会导致此问题,并且运行它的机器可以使用这些方法计算 1,000,000,000,000 的解决方案。
解决方案
推荐阅读
- lazy-loading - Zapier 延迟加载输入字段选择
- highcharts - 使用 Highcharts 绘制饼图,但出现数据错误
- javascript - Chart.js 更新雷达图的动画
- angular - 如何使用 WEB.API 将图像保存到文件夹中
- c# - 如何从 AWS S3 存储下载文件作为字节数组?
- c# - 从 PowerShell WebJob 读取 Azure WebApp ApplicationSetting
- cote - 如何在 cote 上仅启用 Sockend 的部分 api?
- browser - Firefox DevTools 中是否有类似 Chrome DevTools 的应用程序面板?
- angular - 来自 @alyle/ui 包 Angular 6 的调整大小和裁剪图像的问题
- wordpress - 在 wordpress 中创建 Typeform