2011-02-09 4 views
5

꼬리 재귀는 얼랭의 성능에 대한 순회 재귀보다 낫습니까?
아니면 erlang 컴파일러도 순방향 재귀를 최적화합니까?
앞으로 재귀 대신 꼬리 재귀를 사용해야하는 이유가 있습니까?
제 의견으로는 앞으로 재귀가 더 예쁘게 보입니다.꼬리 재귀 대 얼랭의 순방향 재귀

답변

3

테일 재귀는 일반적으로 메모리를 적게 사용하기 때문에 더 좋습니다. 다음 호출에서 필요한 것을 가져와 스택에서의 메모리 사용을 최소화합니다. 또한 꼬리 재귀 코드가 최적화 될 때 필요없는 함수 반환을 버려 일부 경우에 약간 더 빠르게 만들 수 있습니다.

예를 들어 함수의 반환 값이 다른 함수를 호출하는 경우 스택에 중개 함수를 유지할 필요가 없습니다. 따라서 코드는 내부 함수에서 직접 호출자에게로 점프합니다.

비 꼬리 재귀는 경우에 따라 Erlang 컴파일러에 의해 꼬리 재귀에 최적화되지만이를 고려하지 않습니다. 할 수있을 때마다 꼬리 재귀 함수를 코딩하는 것이 좋은 습관이되게하십시오.

10

꼬리 재귀와 전달 재귀는 완전히 다른 개념입니다. 이 부분을 참조하십시오. discussion.

꼬리 재귀 적이며 따라서 최적화 된 순방향 재귀를 작성할 수 있습니다. 꼬리 재귀가 아닌 순방향 재귀를 작성할 수도 있습니다.이 경우 최적화되지 않습니다. 즉 스택 공간을 소비합니다.