📜  最大公约数递归 - Javascript (1)

📅  最后修改于: 2023-12-03 14:55:18.238000             🧑  作者: Mango

最大公约数递归 - Javascript

最大公约数(Greatest Common Divisor,简称 GCD)是指两个或多个整数的公共因子中最大的一个。在计算机编程中,经常需要求取最大公约数。最大公约数的求解方法可以使用递归或非递归方式实现。

下面介绍一种使用递归方式求取最大公约数的 Javascript 实现。

代码实现:
/**
 * 求取两个数的最大公约数 - 递归算法
 * @param {number} a 较大的一个数
 * @param {number} b 较小的一个数
 * @returns {number} a 和 b 的最大公约数
 */
function gcd(a, b) {
  if (a < b) { // 保证 a 始终大于等于 b
    let temp = a
    a = b
    b = temp
  }
  if (b === 0) {
    return a
  } else {
    return gcd(b, a % b)
  }
}
代码解析:

该算法的实现思路是:

  • 如果 b 等于 0,则 a 就是最大公约数;
  • 否则,将 a 取模 b 的结果作为新的 b,a 变成原来的 b,再重新进行上述判断。

由于使用了递归算法,因此需要注意递归过深可能会引起栈溢出问题,应当根据实际情况选择合适的数据范围。

测试样例:

下面给出一些测试样例(使用 mocha 进行测试):

describe('gcd', () => {
  it('gcd(2, 5) should return 1', () => {
    assert.strictEqual(gcd(2, 5), 1)
  })
  it('gcd(2, 3) should return 1', () => {
    assert.strictEqual(gcd(2, 3), 1)
  })
  it('gcd(12, 18) should return 6', () => {
    assert.strictEqual(gcd(12, 18), 6)
  })
})
结语:

本文介绍了一种使用递归方式求取最大公约数的 Javascript 实现,并给出了测试样例进行验证。对于求解最大公约数,递归算法是一种简单而有效的实现方式,但需要注意递归过深可能会引起栈溢出问题。