Java
재귀 함수의 흐름 및 장단점
알라알리야
2023. 3. 15. 22:42
예시 문제
{1,2,3} 을 {3,2,1} 로 변환
int[] arr = {1, 2, 3};
public int[] reverseArr(int[] arr) {
if(arr.length == 0) {
return new int[]{};
}
int[] head = Arrays.copyOfRange(arr, arr.length - 1, arr.length); // 가장 끝 인덱스 복사
int[] tail = reverseArr(Arrays.copyOfRange(arr, 0, arr.length - 1)); // 나머지 배열 복사
int[] result = new int[head.length + tail.length];
System.arraycopy(head, 0, result, 0, head.length);
System.arraycopy(tail, 0, result, head.length, tail.length);
return result;
copyOfRange(복사할 배열, 첫 인덱스, 끝 인덱스) // 끝 인덱스는 포함하지 않음
System.arraycopy(복사할 배열, 첫 인덱스, 복사 받는 배열, 복사 받는 배열의 첫 인덱스, 읽을 길이)
재귀 호출 과정
재귀 함수의 장점
- 코드가 간결해지고 수정이 용이
- 변수를 여러 개 사용할 필요가 없음
재귀 함수의 단점
- 코드의 흐름을 직관적으로 파악하기 어려움
- 반복하여 메서드를 호출하므로 메모리를 반복문에 비해 더 많이 사용
- 메서드를 호출하고 종료된 이후에 복귀를 위한 컨텍스트 스위칭 비용 발생