1

3 진수 연산자에 대해 머리를 쓰려고 고군분투하고 있습니다. 따라서 최근 예제를 통해 생각해 보았습니다.보다 기본적인 (자세한 것은 분명하지만) 표기법으로 리펙토링하려고 시도했습니다. 그러나, 제 구현은 오류를 던져 버리는 반면에 제 3의 버전은 재구성하려고 노력하고 있습니다.Euclidean GCF를 구현하면 "범위 오류 : 최대 호출 스택 크기가 초과되었습니다."가 발생합니다.

두 숫자의 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; 
    } 
    } 

를 구현하려고 시도한하지만, 분명히 나는 ​​결과로부터 아직 이해하지 못하고있다. else 문이있는 경우

+0

당신은 이해하지 못하는 부분이 있습니까? 첫 번째 함수는'! b'를 평가합니다. 'true'로 평가하면 'a'를 반환하고, 그렇지 않으면'gcd (b, a % b)'를 반환합니다. –

답변

1

방법은로 원을 변환 :

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

터너는 기본적으로 말하고있다 "b는 falsy의 경우는, 그렇지 않은 경우의 GCD (B, A %의 B)를 반환합니다."