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(복사할 배열, 첫 인덱스, 복사 받는 배열, 복사 받는 배열의 첫 인덱스, 읽을 길이)

 

 

재귀 호출 과정


 

재귀 함수의 장점

  • 코드가 간결해지고 수정이 용이
  • 변수를 여러 개 사용할 필요가 없음

재귀 함수의 단점

  • 코드의 흐름을 직관적으로 파악하기 어려움
  • 반복하여 메서드를 호출하므로 메모리를 반복문에 비해 더 많이 사용
  • 메서드를 호출하고 종료된 이후에 복귀를 위한 컨텍스트 스위칭 비용 발생