2016-10-02 2 views
0

저는 프로젝트 오일러를 해왔습니다. 이유가 있습니다. 어느 시점에서 필자는 함수의 결과와 값을 비교하기를 원했습니다. 이후 다른 솔루션을 선택했지만 궁금한 점이 있습니다. 어떻게 작동할까요? 내가 좋아하는 뭔가를 수행하는 경우 :조건부 함수 사용

//javascript 
if x == mathyFunction(10){ 
    //do this 
} 

function mathyFunction(y){ 
    if(y>0){ 
    mathyFunction(y-1); 
    return y; 
    } else { 
    return y; 
    } 
} 

을 나는이 꼬리 재귀 또는 아무것도 공상 아니라고 알고 있어요, 나는 로직이 뒤에 작동하는 방법을 주로 그냥 궁금 해요.

컴퓨터는 어떻게 해석합니까? 값 == x 중 하나 인 경우 true을 반환하겠습니까, 아니면 모든 값 == x 만 반환하면 true를 반환합니까? 내가 파기를 계속할지라도 실험은 나를 추측하게 만들었다.

+0

코드에서 10 값을 0으로 줄이고 항상 0을 반환하는 mathyFunction이 표시됩니다. 그런 다음 x와 비교하면 x가 0이 아닌 경우 false가됩니다. – nocturns2

+0

@ nocturns2 0을 반환하지 않고 'y'를 반환합니다. – sepp2k

+0

네 말이 맞아. 나는 y의 값을 언급하고 있었는데, 이것은 x의 값과 비교할 것입니다. – nocturns2

답변

1

묻는 언어를 지정하지 않았지만 return 문의 일반적인 의미를 가정하면 함수는 두 번 이상 반환 할 수 없습니다. 에 의한 경우 "개별적으로 모든 값을 반환"그래서,이 같은 의미 :

function f() { 
    return 1; 
    return 2; 
    ... 
} 

그런 다음 모든 것을 처음 return 그냥 죽은 코드이며, return 1이 유일한 return 문 것처럼이 동일합니다 후. 함수 호출에는 정확히 하나의 값이 있으며 그 값은 비교 대상 값입니다. 당신이 mathyFunctionxy 사이의 값을 포함하는 목록 또는 다른 컬렉션 개체를 반환하는 것을 의미하는 경우

은 다음 x 그 목록과 비교됩니다. 다시 의미론은 언어에 따라 다르지만 대부분의 언어에서 숫자를 목록과 비교하는 것은 유형 오류이거나 그냥 false입니다.

(C#의 yield return 파이썬의 yield 같이), 다음 함수의 결과는 반복자 객체의 일종 이전 단락에서와 같은 일이 될 것입니다 개별적으로 값을 반환하여 당신이 yield 문에 참조 된 경우 적용됩니다.

+0

사과, 나는 좀 더 구체적 이어야만했습니다. 그것은 자바 스크립트입니다. 'mathyFunction'의 배후에있는 코드는 재귀 적 (recursive)이므로 재귀 적으로 값을 반환합니다. 이를 반영하기 위해 예제를 약간 수정했으며, 간단하게하기 위해'mathyFunction (x, y)'를'mathyFunction (x)'로 변경했습니다. – Ucenna

+0

@Ucenna 편집 한 질문의 함수는 ID 함수입니다. 'if' 두 경우 모두'y'를 리턴합니다. 이 경우에는 재귀 적으로 함수를 호출하지만 재귀 호출의 결과로 아무 것도하지 않기 때문에 아무 것도하지 않습니다 (JavaScript 엔진이 해당 호출을 멀리 최적화하도록 관리하지 않으면 코드가 오래 걸리게하는 것을 제외하고) . 다시 : 함수 호출은 두 번 이상 반환 할 수 없습니다. 재귀는 변경하지 않습니다. – sepp2k

+0

Okey dokey then! 나는 그 결론에가는 길을 가고 있었다. 당신이 말한 것은 내 결과와 완벽하게 일치합니다. – Ucenna