3월 14일 재귀학습 정리.
question: Arrays.copyOfRange()를 통해 배열의 요소를 차감하면서 재귀를 진행하는데, 분명 from 1 -> 인덱스 1부터 새로운 배열을 만들지만, 배열의 요소가 하나 남은 경우도 연산이 진행되는 이유를 모르겠다.
-길이가 1인 [3] 배열이 전달되었다. 해당 배열이 copyOfRange 메소드로 전달 되었을 때, copyOfRange의 시작조건(인덱스)이 1부터라고 명시되어있으므로 해당 연산에서 오류가 날 것 같다고 생각했다. 하지만 결과는 빈 배열이 출력되었다. 이유가 뭘까? 구글을 아무리 찾아봐도 함수 내부의 자세한 연산은 나오지 않아 IntelliJ에서 직접 검색을 했다.
배열의 길이는 시작위치와 끝 위치의 차로 결정되고있다. [3] 배열을 original로 전달했을때, from=1, to= arr.length = 1 의 값이 들어간다. 그 아래 newLength를 보면 from과 to의 차이가 할당된다. 예외처리는 음수가 아니기때문에 넘어가고,
int[] copy = new int[newLength]
= 배열의 길이가 0인 배열이 생성된다 = 빈 배열 생성
아래 arraycopy 연산은 [3] 배열을 새로 만든 copy 배열로 복사하는 과정이고, Math.min 조건에서 min 내부의 두 값들이 모두 0으로 동일하다. 따라서 "copy 배열의 0부터 0위치까지 복사"라는 연산 실행시 아무것도 복사하지 않는 빈 배열이 출력된다.
System.arraycopy( Object src, int srcPos, Object dest, int destPos, int length )