JavaScript尾递归超过最大调用堆栈

时间:2018-05-31 14:25:27

标签: javascript node.js ecmascript-6

在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));

这应该采用不同的结构来避免超出调用堆栈,还是使用引擎的问题?

使用whilefor循环不会导致此问题,并且运行此问题的计算机可以使用这些方法为1,000,000,000,000计算此解决方案。

0 个答案:

没有答案