CS 기초 · 기초
재귀(Recursion)와 반복(Iteration)의 차이점과 변환 방법에 대해 설명해주세요.
힌트 · 스택 오버플로우, 꼬리 재귀 최적화를 생각해보세요.
스택종료 조건메모리 사용량시간 복잡도꼬리 재귀
모범답안
면접관님, 재귀와 반복은 둘 다 코드를 반복적으로 실행하는 방법이지만, 작동 방식에 차이가 있습니다.
재귀는 함수가 자기 자신을 호출하는 방식입니다. 장점은 코드가 간결하고 가독성이 좋을 수 있다는 점입니다. 하지만 함수 호출 시 스택에 메모리를 계속 쌓기 때문에 스택 오버플로우가 발생할 위험이 있고, 반복에 비해 일반적으로 성능이 떨어집니다. 반드시 종료 조건을 명확하게 설정해야 무한 루프를 방지할 수 있습니다.
반복은 for나 while 같은 반복문을 사용하여 코드를 반복합니다. 재귀에 비해 메모리 사용량이 적고 성능이 좋은 경우가 많습니다.
재귀를 반복으로 변환하는 것은 가능합니다. 스택을 직접 사용하여 재귀 호출을 흉내 내거나, 꼬리 재귀 최적화가 가능한 경우에는 반복문으로 쉽게 변환할 수 있습니다. 반대로, 반복문을 재귀 함수로 바꾸는 것도 가능하지만, 가독성이 떨어질 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 자료구조 면접 질문
- 배열(Array)과 연결 리스트(Linked List)의 차이점과 사용 상황에 대해 설명해주세요.
- 시간 복잡도와 공간 복잡도의 개념과 Big-O 표기법에 대해 설명해주세요.
- 이진 탐색(Binary Search)의 동작 원리와 시간 복잡도를 설명해주세요.
- 이중 연결 리스트(Doubly Linked List)의 특징과 단일 연결 리스트와의 차이점은?
- 동적 배열(Dynamic Array)은 내부적으로 어떻게 크기를 늘리며, 이 과정에서 발생하는 비용을 어떻게 평가하나요?
- HashMap의 동작 원리와 해시 충돌 해결 방법에 대해 설명해주세요.