재귀는 루프보다 본질적으로 낫거나 나쁘지 않습니다. 각각은 장단점이 있으며 프로그래밍 언어 (및 구현)에 따라 다릅니다.
기술적으로 반복 루프는 하드웨어 수준에서 일반적인 컴퓨터 시스템에 더 잘 맞습니다. 머신 코드 수준에서 루프는 테스트와 조건부 점프에 불과하지만 재귀 (순진하게 구현)는 스택 프레임 푸시, 점프, 리턴 및 팝핑을 포함합니다. 스택에서. OTOH는 스택 푸시 / 팝을 피할 수 있도록 많은 재귀 사례 (특히 반복 루프와 매우 유사한 사례)를 작성할 수 있습니다. 재귀 함수 호출이 리턴하기 전에 함수 본문에서 마지막으로 발생하는 경우 가능하며 일반적으로 테일 호출 최적화 (또는 테일 재귀 최적화 )라고합니다. 적절하게 테일 콜에 최적화 된 재귀 함수는 대부분 머신 코드 레벨의 반복 루프와 동일합니다.
또 다른 고려 사항은 반복 루프에는 파괴적인 상태 업데이트가 필요하므로 순수한 (부작용이없는) 언어 시맨틱과 호환되지 않습니다. 이것이 Haskell과 같은 순수한 언어에 루프 구성이 전혀없는 이유이며, 다른 많은 함수형 프로그래밍 언어에는 완전히 부족하거나 가능한 한 피하는 것이 좋습니다.
인터뷰에서 이러한 질문이 너무 많이 나타나는 이유는 답변하기 위해서는 변수, 함수 호출, 범위 및 물론 루프 및 재귀와 같은 많은 중요한 프로그래밍 개념에 대한 철저한 이해가 필요하기 때문입니다. 두 가지 근본적으로 다른 각도에서 문제에 접근하고 동일한 개념의 다른 표현 사이를 이동할 수있는 정신적 유연성을 테이블에 가져옵니다.
경험과 연구에 따르면 변수, 포인터 및 재귀를 이해할 수있는 능력이있는 사람과 그렇지 않은 사람 사이에는 경계가 있다고합니다. 학습, 경험을 통해 프레임 워크, API, 프로그래밍 언어 및 관련 사례를 포함한 프로그래밍의 거의 모든 것을 얻을 수 있지만이 세 가지 핵심 개념에 대한 직관을 개발할 수없는 경우 프로그래머가되기에 부적합합니다. 간단한 반복 루프를 재귀 버전으로 변환하는 것은 비 프로그래머를 필터링하는 가장 빠른 방법에 관한 것입니다. 숙련되지 않은 프로그래머도 일반적으로 15 분 안에 처리 할 수 있으며 언어에 구애받지 않는 문제이므로 후보자가 선택할 수 있습니다. 특유의 걸림돌 대신 자신이 선택한 언어.
인터뷰에서 이와 같은 질문을한다면 좋은 징조입니다. 예비 고용주는 프로그래밍 도구 매뉴얼을 암기 한 사람들이 아니라 프로그래밍 할 수있는 사람들을 찾고 있음을 의미합니다.