2013-03-31 2 views
2

유클리드 알고리즘을 사용하여 최대 공약수 (GCD)와 최소 공배수 (LCM)를 찾기 위해 작성한 간단한 스크립트가 있습니다.변수가 재귀 JavaScript 함수에서 정의되지 않습니다?

불행히도 하나 이상의 단계에서이 작업을 수행해야하는 경우 함수에서 반환 할 관련 변수가 정의되지 않게됩니다. 내가 재귀를 적절하게 따라하고 원래의 함수로 적절하게 돌아가는 것처럼 보이는 중단 점을 가진 디버거에서 다음과 같이 시도했지만, 리턴 될 예정 이었지만 함수의 끝에서 신비하게 사라진다.

왜 이런 일이 일어나고 있는지 또는 내가 해결할 수있는 이유가 확실하지 않습니다. 내 코드는 다음과 같습니다 : 그래서

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은 20의 정확한 답을 줄 것이다 (60)은 그러나 당신이 숫자와 같은 20, 60 또는 126, 35를 사용할 경우 & B를 사용하는 경우 비참하게 실패합니다.

+0

을 나는 http://ideone.com/을에서 시도하는 코드를 붙여, 그것은 나에게 경고를에 준 줄 2 : '==='를 사용하여 0과 비교하십시오. –

+4

'GCD'의 경로 중 하나에 'return'이 없습니다. 그게 비린내 같아. – Mat

+0

당신이하려는 일이 이것입니까?> [** FIDDLE **] (http://jsfiddle.net/wEv8Y/) ?? – adeneo

답변

7

함수의 재귀 부분에서 값을 반환하지 않으므로 함수에서 반환 된 값은 undefined이됩니다.

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

또한 하나의 return 이것을 쓸 수 있습니다 : : A는 return 추가

function GCD(a, b) { 
    return a % b == 0 ? b : GCD(b, (a % b)); 
} 
+0

완벽! 고마워요, 나는 완전히 근본적인 hehe 뭔가 놓치고 있었다는 것을 알았어 :) – Tomcat

관련 문제