이론적으로 재귀함수를 사용해 문제를 해결하기 위해서는 문제를 가장 작은 단위까지 더는 작아지지 않을 때 까지 문제를 쪼개고 해결합니다. (말이 쉽지)
기본적으로 base case 와 recursive case를 염두하여 함수를 만들어야 합니다.
return
값을 재귀 함수의 인자로 전달해 계산합니다.재귀를 사용하다 보면, 이따금 아래와 같은 상황을 보곤 합니다
탈출문을 잘못 작성하면 브레이크 기능을 하지 못하면 스텍 오버플로우를 일으킬 수 있습니다.
그럼에도 알고리즘이 for
문을 사용할 때 보다 가독성이 좋고, 변수의 사용량을 줄일 수 있기 때문에 오류 발생 확률을 낮출 수 있다고 합니다.
이를 대처하기 위해 꼬리재귀 최적화를 사용할 수 있습니다.
꼬리재귀 최적화는 컴파일러가 컴파일 하는 시점에 스택 프레임을 재사용 할 수 있도록 일반적인 for, while 문과 비슷한 형태로 코드를 변환하는 기법입니다.
일반적인 재귀 함수 예시 :
function factorial(n){ if(n == 1) { return 1; } return n * factorial(n - 1); }
꼬리 재귀 최적화 함수 예시 :
function factorial(n){ if(n === 1){ return n; } let result = fac(n-1); return n*result;