
function solution(n) {
// n 번째 피보나치 수를 1234567로 나눈 나머지를 리턴하는 함수를 구하라
// 1. n번째 피보나치 수를 구하는 함수 : 재귀함수는 안된다.
if (n === 0) return 0;
if (n === 1) return 1;
let pre = 0;
let cur = 1;
let acc;
for (let i = 1; i < n; i++) {
acc = (pre + cur);
pre = cur % 1234567;
cur = acc % 1234567;
}
return acc % 1234567;
}
이런 경우 재귀함수는 과도한 스택으로 런타임에러를 발생시킨다.
for 문을 사용해서 해결하자.
피보나치수를 완전히 계산한 후에 1234567로 나누려하면 원하는 결과가 나오지 않는다.
이유는 자바스크립트의 숫자 범위가 (2 ^ 53 - 1) ~ -(2 ^ 53 - 1) 내에 있기 때문에 초과된 수에 대해선 Infinity로 표시되며 Infinity를 1234567로 나누는 연산을 하면 NaN가 나와 원하는 결과가 나오지 않는다.
(1476번째 피보나치 수 까지는 계산 되지만 1477번째 부터 Infinity로 표시된다.)
따라서 (A + B) % C의 값은 ( ( A % C ) + ( B % C) ) % C와 같다는 성질을 이용하여 값을 구한다.
출처 : http://ouoiouoi.blogspot.com/2017/05/javascript-number.html
https://programmers.co.kr/questions/11991