0

我有以下函数可以找到 2 个整数的最大公约数。我不明白 return bestCommonDivisor(b, (a % b)); 中发生了什么 部分。

如果我做 bestCommonDivisor(8, 12) 我得到 4 这是正确的,但是当我尝试评估 return bestCommonDivisor(b, (a % b)); 我得到的部分 (12, (8 % 12)) 简化为 (12, 0) 这怎么等于 4?

// Finds greatest common divisor
function greatestCommonDivisor(a, b) {
    if (b == 0) {
        return a;
    }

    return greatestCommonDivisor(b, (a % b));
}
4

3 回答 3

3

该函数使用递归调用自身,直到满足返回实际答案的基本条件。

发生以下情况greatestCommonDivisor(8, 12)时:

  1. b != 0 所以调用 bestCommonDivisor(12, 8 % 12) //8 % 12 = 8
  2. b != 0 所以调用 bestCommonDivisor(8, 12 % 8) // 12 % 8 = 4
  3. b != 0 所以调用 bestCommonDivisor(4, 8 % 4) // 8 % 4 = 0
  4. b == 0 所以返回 4
于 2013-01-24T01:43:03.203 回答
1

这是一个递归函数。它不返回两个值,它a在使用不同的(较小的)参数一遍又一遍地调用自己之后返回,直到b等于0(意思是,你不能再除或取模了)。

于 2013-01-24T01:40:03.413 回答
0

这是找出两个数字之间最大公约数的基本算法。

该函数使用其他两个参数返回对自身的调用,而不是像您想象的那样返回两个值 (b, (a%b)) :)

于 2013-01-24T02:20:15.783 回答