재귀 호출
- 함수가 호출되면 함수가 호출된 장소를 가리키는 주소값이 시스템 내부의 스택에 저장됨
(호출된 함수의 작업을 끝마치고 리턴될 때 되돌아갈 위치를 기억) - 재귀적으로 호출된 함수가 리턴될 때 함수를 호출했던 원래 자리로 되돌아와야 하는 이유
- 원래 함수에서 재귀적으로 함수를 호출한 부분 다음에 다른 내용이 포함되어 있으면 그 내용을 계속해서 처리해야 하기 때문
- 내부 스택을 이용해서 함수가 호출된 지점을 정확하게 기억해야 하기 때문에 메모리의 사용이나 프로그램의 처리 속도 면에서 추가적인 부하가 있음
꼬리재귀
- 성능과 간결함, 이 두가지 방법의 장점을 모두 취함
- 원래 위치로 돌아갔을 때 할일이 남아있지 않기 때문에 함수가 호출된 위치를 기억해 둘 필요가 없음
- 똑똑한 컴파일러는 꼬리재귀를 인식하여 최적화를 해줌
자세한 내용은 여기로