재귀로 코드를 짤 때, 생각해야하는 것은 2가지이다.
1. 탈출 조건(base case)
- 재귀 호출이 멈추는 조건 = 문제를 더 이상 쪼갤 수 없는 경우
- 단순한 문제의 해답을 return
2. 반복 조건(recursive case)
장점/단점
장점
- 반복문 대신에 사용하여, 여러 개의 반복문을 사용하지 않아도 되고 코드가 간결해진다.
- 변수를 여러 개 사용할 필요가 없다.
단점
- 코드가 직관적이지 않다.
- 매서드를 반복해서 호출하므로, 호출될 때마다 메서드의 정보(지역변수, 매개변수, 반환값)를 stack에 저장하게 된다. -> 메모리를 많이 사용
- 메서드가 종료된 후에, 복귀를 위한 컨텍스트 스위칭 비용이 발생한다.
🚨 주의 🚨
spring에서 재귀는 쓰지 말자! 함수가 호출될 때마다, 계속 stack에 쌓이기 때문에 메모리 누수가 발생할 가능성이 높다.
알고리즘 문제를 풀 때만 재귀를 사용할 것!