在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
或for
循环不会导致此问题,并且运行此问题的计算机可以使用这些方法为1,000,000,000,000计算此解决方案。