理解返回2个值的JavaScript函数

时间:2013-01-24 01:36:54

标签: javascript recursion

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

如果我做了greatCommonDivisor(8,12),我得到4这是正确的,但当我试图评估返回的greatCommonDivisor(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));
}

3 个答案:

答案 0 :(得分:3)

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

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

  1. b!= 0所以调用highestCommonDivisor(12,8%12)// 8%12 = 8
  2. b!= 0所以调用maximumCommonDivisor(8,12%8)// 12%8 = 4
  3. b!= 0所以调用highestCommonDivisor(4,8%4)// 8%4 = 0
  4. b == 0所以返回4

答案 1 :(得分:1)

这是一个递归函数。它不返回两个值,它在用不同(较小)参数反复调用自身后返回a,直到b等于0(意思是,你不能分割或取模数了。)

答案 2 :(得分:0)

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

该函数使用另外两个参数返回对自身的调用,而不是按照您的想法返回两个值(b,(a%b)):)