Javascript 多重数的最大公约数

Javascript 多重数的最大公约数,javascript,Javascript,我提出这段代码是为了求解多个数字的最大公约数,但是,由于使用了递归,如果一个数字太大(比如说4位以上),那么就超过了最大调用堆栈大小。我可以改进代码来解决这个问题吗 让arr=[10,40,395] 设maxNum=Math.max(…arr) 函数getGCD(){ arr.forEach(函数(arrNum){ 如果(maxNum==0){ 返回1; } 如果(arrNum%maxNum==0){ 返回maxNum; } 最大值--; getGCD(); }); 返回maxNum; } c

我提出这段代码是为了求解多个数字的最大公约数,但是,由于使用了递归,如果一个数字太大(比如说4位以上),那么就超过了最大调用堆栈大小。我可以改进代码来解决这个问题吗

让arr=[10,40,395]
设maxNum=Math.max(…arr)
函数getGCD(){
arr.forEach(函数(arrNum){
如果(maxNum==0){
返回1;
}
如果(arrNum%maxNum==0){
返回maxNum;
}
最大值--;
getGCD();
});
返回maxNum;
}

console.log(getGCD())
这里没有理由使用递归;你基本上只是从最大的数字开始迭代,直到你找到一个结果。改为使用
for
循环。此外,GCD不能大于集合中的最小值,因此您可以将
Math.max
替换为
Math.min
,以减少大量迭代。有关计算GCDU的更好方法,请参阅。例如,当数组的长度为10000000时会发生什么情况?递归更适合于难以用迭代方法解决的问题。更不用说迭代方法会更快。