首页 > 解决方案 > 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));

是否应该采用不同的结构以避免超出调用堆栈,或者是正在使用的引擎的问题?

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

标签: javascriptnode.jsecmascript-6

解决方案


推荐阅读