2

再帰的な方法 (ユークリッドのアルゴリズム) を使用して、最大公約数 (GCD) と最小公倍数 (LCM) を見つけるために作成した単純なスクリプトがあります。

残念ながら、これを複数のステップで行う必要がある場合、関数から返される関連する変数は未定義になります。ブレークポイントを使用してデバッガーでそれを追跡しようとしましたが、これは再帰を適切に追跡し、元の関数に適切に戻るように見えますが、返されることを意図しているにもかかわらず、関数の最後で不思議なことに消えますか?

なぜこれが起こっているのか、それを修正するために何ができるのかわかりません。私のコードは以下の通りです:

function GCD(a, b) {
    if (a % b == 0) {
        return b;
    }
    else {
        GCD(b, (a % b));
    }
}

function LCM (a, b) {
    return (a*b)/GCD(a, b);
}

function makeDM (a, b) {
    return (GCD(a, b) + " " + LCM(a, b));
}

したがって、60、20 などの a & b を使用すると、20 と 60 の正解が得られます。ただし、20、60、または 126、35 などの数値を使用すると、惨めに失敗します。

4

1 に答える 1

7

関数の再帰部分から値を返さないため、関数から返される値は になりますundefined。追加return:

function GCD(a, b) {
    if (a % b == 0) {
        return b;
    }
    else {
        return GCD(b, (a % b));
    }
}

単一の でこれを書くこともできますreturn:

function GCD(a, b) {
    return a % b == 0 ? b : GCD(b, (a % b));
}
于 2013-03-31T07:32:12.273 に答える