강의로 돌아가기
brgndyy

피보나치로 풀었는데 테케 7부터 다 틀립니다 이유가 뭘까요..?

이유가 무엇일까요..?

작성중인 코드―solution.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(n) {
  function fib(n, memo = []) {
    if (memo[n] !== undefined) {
      return memo[n];
    }

    if (n < 2) {
      return 1;
    }

    let res = fib(n - 1, memo) + fib(n - 2, memo);

    memo[n] = res;

    return res;
  }

  return fib(n) % 1234567;
}
1 개의 답변
JoChaeWoo

n 번째 결과가 너무 커서 모든 값을 저장할 수 없어져 오차가 생기는 것입니다.
모듈러 연산(%)은 합성 법칙이 성립하므로 마지막에 나머지 연산으로 처리한 결과와 매 번 나머지 연산한 결과가 같습니다.
값이 너무 커지지 않도록 매 번 나머지 연산을 하면 오차가 발생하지 않을 것입니다.

합성 법칙

// k =1234567
(a + b) % k == a % k + b % k
fib(n) % k == (fib(n - 1) + fib(n - 2)) % k
(fib(n - 1) + fib(n - 2)) % k == fib(n - 1) % k + fib(n - 2) % k
  • brgndyy

    답변 감사드립니다~

    brgndyy―2023.05.10 13:25
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.