javascript - 我怎样才能找到两个或多个整数的GCD,javascript?没有方法

标签 javascript recursion

我已经知道如何在没有方法的情况下找到 GCD(如下),但是如何创建一个函数来使用两个或更多整数来完成此操作?

function greatest(x,y){
  return x<0 || y<0 ? null : x%y===0 ? y : greatest(y, x%y);
}
console.log(greatest(64,2)); //2
console.log(greatest(88,200)); //8

//Finding the gcd of two integers using recursion 
 const gcd = function(x, y) {
  if (!y){ //if y is zero return back x
    return x;
  }
  return gcd(y, x % y);
}

最佳答案

您可以使用spread syntax将剩余参数分组到一个数组中,并一次获取一对 GCD。 LCM 可以通过类似的递归来非常相似地完成。

const gcd = function(x, y, ...z) {
  if (!y && z.length > 0) {
    return gcd(x, ...z);
  }
  if (!y) {
    return x;
  }
  return gcd(y, x % y, ...z);
}

console.log(gcd(6, 12, 8));
console.log(gcd(9, 15, 36));

编辑:这是 LCM,按照评论中的要求。注意,需要划分多个GCD,不能将多个GCD组合在一起进行划分。

const lcm = function(x, y, ...z) {
  if (z.length == 0) {
    return x * y / gcd(x, y);
  }
  return lcm(x * y / gcd(x, y), ...z);
}

关于javascript - 我怎样才能找到两个或多个整数的GCD,javascript?没有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68371293/

相关文章:

c++ - 在 C++ 中引用此函数

java - java 递归子字符串搜索

javascript - 想要在单击 html 时显示特定的 div

algorithm - 递归编辑距离相似算法

javascript - Framer Motion 退出动画没有在带有 react-router-dom 的 Accordion 上触发

javascript - 如何重置 dojo CheckedMultiSelect

python - 了解汉诺塔的 Python

java - Java 十六进制递归问题

javascript - 如何删除特定标签后的所有标签?

javascript - 如何解决javascript中settimeout内存泄漏问题