본문 바로가기
TIL&WIL

250114 TIL - 꼬리재귀?

by 나노다 2025. 1. 14.

알고리즘 풀이 회고

  • 배열을 정렬했으면 굳이 최대값 최소값을 위한 추가 로직이 필요하지 않아요... 맨 앞 또는 맨 뒤의 요소가 최대 또는 최소겠죠?
  • 일반적으로 재귀와 반복 중에는 반복이 연산 속도도 빠르고, 스택 메모리도 덜 차지하지만,  재귀도 나름 변수 사용을 줄이고, 가독성이 높다는 장점이 있다! 또한 알고리즘 자체가 재귀에 적합한 경우, 즉 연산 결과가 또 피연산자로 들어가는 경우 등이 있어 상황에 맞게 취사선택하면 되는데, "꼬리 재귀"라는 기법을 사용하면 재귀의 단점이 많이 줄어든다고....?

꼬리 재귀

일반적인 재귀는 return 구문에서 특정한 연산이 필요해유...

function factorial(n) {
    if (n === 1) {
        return 1;
    }
    return n * factorial(n-1); // 곱하기 해줘야한다!!
}

반면 꼬리 재귀는 매 재귀 실행마다 공유하는 일종의 누산기 같은 변수가 있어서, 추가 연산 없이 재귀가 진행됨

function factorial(n, total = 1){
    if(n === 1){
        return total;
    }
    return factorial(n - 1, n * total); // total을 활용해 바로 재귀 실행
}

일반 재귀는 매 실행의 return 값이 스택에 저장돼야 하지만, 꼬리 재귀는 전체 실행의 return 값 하나만 저장되면 되기 때문에, 재귀의 스택 오버플로우 문제를 많이 완화할 수 있다! 다만 꼬리 재귀를 지원하는 언어가 있고, 지원하지 않는 언어가 있다고하니 주의해서 사용해야겄다... 참고로 자바스크립트는 ES6 이상부터 지원한다니, 활용 가능!

'TIL&WIL' 카테고리의 다른 글

250110 TIL - 오늘은 짜잘한 팁  (0) 2025.01.10
250108 TIL - 게임 프로그래밍에서 삼각함수, 역삼각함수  (0) 2025.01.08
250109 TIL- Docker  (0) 2025.01.08
250106 TIL - trim()  (0) 2025.01.06
250103 TIL - Buffer 메서드  (1) 2025.01.03