Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 재귀 함수로 배열에서 가장 작은 숫자 찾는 방법

배열에서 가장 작은 숫자를 찾아야 할 때, 반복문 대신 재귀(Recursion)를 활용하면 우아하게 해결할 수 있습니다. 이 글에서는 JavaScript의 재귀 함수를 사용해 배열 내 최솟값을 구하는 방법을 단계별로 살펴보겠습니다.

예제 배열 준비

먼저 다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.

var numbers = [10, 101, 76, 56, 5, 210, 3, 100];

이 배열에서 최솟값인 3을 찾아내는 것이 목표입니다.

재귀 함수로 최솟값 찾기

재귀 방식의 핵심 아이디어는 다음과 같습니다.

  • 배열에 요소가 하나만 남으면 그 값이 곧 최솟값입니다.
  • 첫 번째 요소가 두 번째 요소보다 크면 첫 번째 요소를 버리고 나머지 배열로 재귀 호출합니다.
  • 그렇지 않으면 첫 번째 요소를 유지한 채 두 번째 요소를 제외하고 재귀 호출합니다.

이 로직을 코드로 구현하면 다음과 같습니다.

코드 예제

function findMinimumElementUsingRecursive(numbers) {
    // 배열에 요소가 하나만 남으면 그것이 최솟값
    if (numbers.length == 1) {
        return numbers[0];
    }
    // 첫 번째 요소가 두 번째보다 크면 첫 번째 요소 제거 후 재귀 호출
    else if (numbers[0] > numbers[1]) {
        return findMinimumElementUsingRecursive(numbers.slice(1));
    }
    // 첫 번째 요소가 더 작으면 두 번째 요소 제거 후 재귀 호출
    else {
        return findMinimumElementUsingRecursive(
            [numbers[0]].concat(numbers.slice(2))
        );
    }
}

var numbers = [10, 101, 76, 56, 5, 210, 3, 100];
console.log("최솟값 = " + findMinimumElementUsingRecursive(numbers));

프로그램 실행 방법

위 코드를 파일로 저장한 뒤, Node.js 환경에서 다음 명령어로 실행할 수 있습니다.

node fileName.js

여기서는 파일 이름을 demo152.js로 저장했다고 가정하겠습니다.

실행 결과

터미널에서 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

PS C:\Users\Amit\JavaScript-code> node demo152.js
최솟값 = 3

동작 원리 정리

이 재귀 함수는 매 호출마다 비교 대상 중 하나의 요소를 제거하며 배열의 크기를 점차 줄여갑니다. 결국 요소가 하나만 남는 순간, 그 값이 전체 배열의 최솟값이 됩니다.

다만 slice()concat()을 사용하기 때문에 매번 새로운 배열이 생성되며, 배열이 클 경우 성능 면에서 비효율적일 수 있습니다. 실무에서는 Math.min(...numbers)reduce() 메서드를 활용하는 것이 더 간결하고 효율적인 대안이 될 수 있습니다.