1

私は3者演算子の周りに頭を浮かべるのに苦労しているので、私は最近出会って好きな例を取って、より基本的な(冗長ではあるが)表記にリファクタリングしようと考えた。しかし、私の実装はエラーをスローしますが、私が再構築しようとしている三値バージョンはうまく動作します。Euclidean GCFを実装すると、「Range Error:最大コールスタックサイズを超えました」という結果になります。

二つの数のGCFを計算するユークリッドのアルゴリズムの三元バージョン:

function gcd(a, b) { 
     return !b ? a : gcd(b, a % b); 
    } 

そして、私は三項演算子のMDNの説明を読んだ

function gcf2(a, b) { 
    if(b !== a){ 
     gcf2(b, a % b); 
    } 
    else { 
     g = b; 
    } 
    } 

それを実装するに私の試みが、それは結果からまだ理解していないことは明らかです。

+0

理解できない部分はありますか?最初の関数は '!b'を評価します。 'true'と評価すると' a'を返し、そうでなければ 'gcd(b、a%b)'を返します。 –

答えて

1

elseステートメントがこれである場合にあなたの三成分を変換する方法:

function gcd2(a, b) { 
    if (!b) { 
    return a; 
    } 
    else { 
    return gcd2(b, a % b); 
    } 
} 

三元は、基本的に "bがfalsyある場合は、それ以外の戻りGCD(B、%bを)返す。" と言っています

関連する問題