Implementation of Euclidean GCF results in "Range Error: Maximum call stack size exceeded."

Implementation of Euclidean GCF results in "Range Error: Maximum call stack size exceeded."

我正在努力了解三元运算符,所以我想我会举一个我最近遇到并喜欢的例子,并尝试将其重构为更基本(尽管冗长)的表示法。然而,我的实现抛出了一个错误,而我试图重建的三元版本工作得很好。

用于计算两个数的 GCF 的欧几里德算法的三元版本:

  function gcd(a, b) {
        return !b ? a : gcd(b, a % b);
    }

我尝试实现它

    function gcf2(a, b) {
    if(b !== a){
      gcf2(b, a % b);
    }
    else {
      g = b;
    }
  }

我已经阅读了三元运算符的 MDN 描述,但很明显我还没有从结果中理解它。

将三元转换为 if else 语句的方法是这样的:

function gcd2(a, b) {
  if (!b) {
    return a;
  }
  else {
    return gcd2(b, a % b);
  }
}

三元基本就是说"If b is falsy, return a. Else return gcd(b, a % b)"