0

2つの整数の最大公約数を見つける次の関数があります。リターンgreatestCommonDivisor(b、(a%b));で何が起こっているのかわかりません。部。

greatCommonDivisor(8、12)を実行すると、4が得られますが、これは正しいですが、戻り値を評価しようとすると、greatestCommonDivisor(b、(a%b)); パートIは(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なので、greatestCommonDivisor(12、8%12)// 8%12=8を呼び出します
  2. b!= 0なので、greatestCommonDivisor(8、12%8)を呼び出します// 12%8 = 4
  3. b!= 0なので、greatestCommonDivisor(4、8%4)// 8%4=0を呼び出します
  4. b == 0なので、4を返します
于 2013-01-24T01:43:03.203 に答える
1

これは再帰関数です。2つの値を返しません。a異なる(小さい)引数で何度も呼び出した後、b等しくなるまで戻ります0(つまり、モジュラスを除算したり、取得したりすることはできなくなります)。

于 2013-01-24T01:40:03.413 に答える
0

これは、2つの数値の間の最大公約数を見つけるための基本的なアルゴリズムです。

この関数は、他の2つのパラメーターを使用してそれ自体への呼び出しを返しますが、思ったように2つの値(b、(a%b))を返しません:)

于 2013-01-24T02:20:15.783 に答える