공부일지
재귀 함수의 흐름 및 장단점 본문
예시 문제
{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(복사할 배열, 첫 인덱스, 복사 받는 배열, 복사 받는 배열의 첫 인덱스, 읽을 길이)
재귀 호출 과정

재귀 함수의 장점
- 코드가 간결해지고 수정이 용이
- 변수를 여러 개 사용할 필요가 없음
재귀 함수의 단점
- 코드의 흐름을 직관적으로 파악하기 어려움
- 반복하여 메서드를 호출하므로 메모리를 반복문에 비해 더 많이 사용
- 메서드를 호출하고 종료된 이후에 복귀를 위한 컨텍스트 스위칭 비용 발생
'Java' 카테고리의 다른 글
[Java] 바인딩, 캐스팅 개념 정리 (11) | 2023.07.05 |
---|---|
ArrayList, hashMap 사용법 (0) | 2023.03.08 |
Char 배열 -> 문자열, 2진수 -> 10진수, 10진수 -> 2진수 (0) | 2023.02.21 |