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

JavaScript 재귀 함수로 중첩 배열의 모든 정수 합산하기

중첩 배열에 포함된 모든 정수를 합산하려면 같은 함수를 반복해서 호출하는 재귀(recursion) 기법을 사용해야 합니다. 배열의 각 요소를 순회하면서 해당 요소가 배열이면 자기 자신을 다시 호출하고, 정수라면 합계에 더하는 방식으로 동작합니다.

예제 코드

function sumOfTotalArray(numberArray) {
    var total = 0;
    for (var index = 0; index < numberArray.length; index++) {
       // 요소가 배열이면 재귀 호출로 내부 값을 모두 더함
       if (numberArray[index] instanceof Array) {
          total = total + sumOfTotalArray(numberArray[index]);
       }
       // 요소가 정수이면 합계에 더함
       if (numberArray[index] === Math.round(numberArray[index])) {
          total = total + numberArray[index];
       }
    }
    return total;
}
var number = new Array(6);
number = [10, 20, 30, 40, 50, 60];
console.log("The sum is=" + sumOfTotalArray(number));

실행 방법

위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 입력합니다.

node fileName.js

여기서는 파일 이름이 demo53.js라고 가정합니다.

출력 결과

프로그램을 실행하면 아래와 같은 결과가 출력됩니다.

PS C:\Users\Amit\JavaScript-code> node demo53.js
The sum is=210

코드 동작 원리

이 코드의 핵심은 두 가지 조건문입니다.

1. instanceof Array 검사: 현재 요소가 배열인지 확인합니다. 배열이라면 sumOfTotalArray() 함수를 재귀적으로 호출하여 그 하위 배열의 합계를 구한 뒤, 현재까지의 합계에 더합니다.

2. Math.round() 비교: 값과 그 값을 반올림한 결과가 같은지 비교하여 정수 여부를 판별합니다. 정수라면 합계에 더해집니다.

중첩 배열 테스트

이 함수는 배열 안에 배열이 몇 겹으로 중첩되어 있더라도 올바르게 동작합니다. 다음과 같이 중첩된 배열을 넣어 확인할 수 있습니다.

var nestedNumber = [10, 20, [30, 40], [50, [60, 70]]];
console.log("중첩 배열의 합=" + sumOfTotalArray(nestedNumber));

실행 결과는 10 + 20 + 30 + 40 + 50 + 60 + 70 = 280이 출력됩니다. 이처럼 재귀 호출을 활용하면 깊이에 상관없이 중첩된 배열의 모든 정수를 손쉽게 합산할 수 있습니다.