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

JavaScript로 수열의 n번째 항 계산하기 – 관계식에서 일반항 유도하기


문제 정의

하나의 숫자 n을 입력받아, 아래 조건을 만족하는 수열 u의 n번째 항 un을 구하는 JavaScript 함수를 작성해야 합니다.

수열 u는 다음과 같이 정의되며,

u0 = 0, u1 = 2

모든 항에 대해 다음 관계식을 만족합니다.

6unun+1 − 5unun+2 + un+1un+2 = 0

접근 방법: 일반항 유도하기

식 자체는 복잡해 보이지만, 수열이 기하급수적으로 증가한다고 가정하면 쉽게 풀립니다. un = rn이라 놓고 관계식에 대입해 보겠습니다.

6·rⁿ·rⁿ⁺¹ − 5·rⁿ·rⁿ⁺² + rⁿ⁺¹·rⁿ⁺² = r²ⁿ⁺¹(r² − 5r + 6) = r²ⁿ⁺¹(r − 2)(r − 3)

이 식이 모든 n에 대해 0이 되려면 r = 2 또는 r = 3이어야 합니다. 초기값 u1 = 2와 일치하는 해는 r = 2이므로, 수열의 일반항은 다음과 같습니다.

un = 2n

실제로 un = 2n을 원래 관계식에 대입하면 좌변이 항상 0이 되므로, 이 해가 조건을 충족함을 확인할 수 있습니다.

구현 코드

일반항을 구했으므로 구현은 매우 간단합니다. 2의 거듭제곱을 반환하기만 하면 됩니다.

const num = 13;

const sequenceValue = (num = 1) => {
    return Math.pow(2, num);
};

console.log(sequenceValue(num));

실행 결과

8192

n = 13일 때 213 = 8192가 출력됩니다.

참고: 큰 입력값 처리하기

n이 커지면 2n도 급격히 증가합니다. JavaScript의 Number 타입은 약 9×1015(253 − 1)까지의 정수만 안전하게 표현할 수 있으므로, 대략 n이 52를 넘으면 결과가 부정확해질 수 있습니다. 이런 경우에는 BigInt를 사용하면 임의로 큰 값도 정밀하게 계산할 수 있습니다.

const bigSequenceValue = (n) => 2n ** BigInt(n);

console.log(bigSequenceValue(100));
// 1267650600228229401496703205376