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