재귀함수에 대한 사실과 오해

BC_kkingkkang·2025년 5월 1일

main 함수에서 다른 함수를 호출하면, 해당 함수 실행이 끝나고 다시 main 함수로 돌아온다.

return은 “나를 호출한 함수로 실행 흐름을 되돌린다”는 뜻이다.

각 함수는 독립적인 메모리 공간(스택 프레임)을 가지므로, 같은 이름의 지역 변수도 서로 영향을 주지 않는다.

재귀함수란?

”자기 자신을 호출하는 함수”

→ 절반은 맞고 절반은 오해의 소지가 있음.

실제로는 동일한 함수 코드를 여러 번 호출하는 것

함수 이름은 같지만, 호출될 때마다 독립된 함수처럼 작동하므로, 각 호출은 별개의 함수처럼 생각하는 것이 구조 이해에 도움이 된다.

즉, 코드는 재사용하지만 메모리는 각각 따로 존재하는 구조


💡 코드는 같지만, 호출될 때마다 새로운 스택 프레임(메모리 공간)이 생긴다.

즉, 같은 함수 이름이더라도 매번 다른 공간에 따로따로 쌓인다.

재귀함수의 장점

  1. 불필요한 변수 선언을 줄일 수 있음
    • 상태를 저장하는 tmp 변수 없이도, 인자(parameter)를 통해 상태를 전달할 수 있다.
  2. 코드가 간결해짐
    • 반복문(for, while) 없이도 짧고 직관적인 코드

재귀함수의 단점

  1. 메모리 사용량 증가
    • 함수가 호출될 때마다 매개변수, 지역 변수, 반환 주소를 포함한 정보가 프로세스 스택에 저장된다.
    • 반복문보다 메모리 소모가 크고 속도가 느릴 수 있음
  2. 컨텍스트 스위칭 비용 발생 (컨텍스트 스위칭)
    • 함수를 호출하고 다시 돌아갈 때, 시스템은 현재 실행 상태(context)를 저장하고 복원해야 한다.
    • 이 과정은 시간과 리소스를 소모하게 되어 성능에 영향을 줄 수 있다.

참고 강의 : 인프런 - 스스로 프로그래밍 하는 기초 자료구조/알고리즘 - 얌얌코딩

0개의 댓글