꼬리 호출 최적화 (tail call optimization)

jino630·2021년 6월 16일
0

recursive

목록 보기
2/4

꼬리 호출은 어떤 함수에서 다른 함수 호출 후 더이상 연산이 없이 바로 반환되는 경우를 말합니다.

스택 프레임은 함수 내에서 사용 중인 변수와 함수 호출 후 돌아갈 주소 등이 저장됩니다. 꼬리 호출은 함수 반환 후 추가 연산이 없기때문에 호출자로 바로 반환되고, 스택 프레임을 필요로 하지 않습니다..

따라서 꼬리 호출은 스택프레임이 따로 필요 없어지며 컴파일러는 이를 최적화하여 꼬리호출일 경우 콜스택에 스택프레임을 만들지 않는 최적화 작업을 하기도 합니다. (컴파일러마다 다름) 이를 꼬리 호출 최적화라 합니다.

재귀함수에 쓰이면 꼬리 재귀!

꼬리 재귀는 스택 오버플로가 발생하진 않지만... 가독성이 일반 재귀함수보다 떨어지기 때문에 사용할땐 가독성 부분을 고려해볼 필요가 있어보입니다.

출처
1. stack overflow
https://stackoverflow.com/questions/310974/what-is-tail-call-optimization
2. wiki
https://en.wikipedia.org/wiki/Tail_call

0개의 댓글