호출 할 때마다 새로운 범위를 만드는입니다. 가변 호이 스팅은 재귀 여부와 상관없이 모든 기능에 대해 동일하게 작동합니다. 각 호출은 서로 다른 스택 프레임에 있기 때문에 고유 한 인수 집합과 로컬 변수가 있습니다. 그러나 객체를 전달하고 변형하면 해당 객체를 가리키는 모든 바인딩에 영향을 미칩니다.
예. 직접 재귀는 수학 개념과 비슷합니다. 상호 재귀는 모호한 제안입니다.이 함수의 호출은 결국이 함수의 인스턴스에 대한 호출로 끝날 것입니다. 그러나 길고 복잡한 경로가있을 수 있습니다. 예를 들어,이 함수를 호출하여이를 결정할 수 없을 수도 있습니다. 암호.
귀하의 abs
은 직접 재귀입니다.
다음은 양수 인수가 홀수인지 확인하는 예입니다.
직접 재귀 :
function isOddDirect(n) {
if (n < 1)
return false;
if (n === 1)
return true;
return isOddDirect(n-2);
}
상호 재귀 :
function isOdd(num) {
if (num === 1)
return true;
return !isEven(num-1);
}
function isEven(num) {
if (num === 0)
return true;
return !isOdd(num-1);
}
함수가 같은 함수 정의에 직접 및 간접 재귀를 사용할 수 있습니다 다음은 둘 다 할 것입니다. Direct는 항상 직접적으로 명시 적으로 호출하는 반면 간접적 인 경우에는 재귀처럼 보이지 않지만 결국에는 원래의 함수로 돌아갈 수 있습니다. 컴파일러가 재귀임을 알지 못하게 할 수 있으므로 명시 적 자체 호출은 일반적으로 쉽게 결정할 수 있습니다.
(상호) 재사용 기능이 꼬리 위치에있는 경우 직접 또는 상호 작용이 없으면 수행 할 수 없습니다.
@rajesh 아니요, 상단에 정의되어 있습니다. –
예 : '직접 꼬리 - 호출 재귀'의 예;) –