카테고리 없음
[JavaScript] 피보나치 수(Fibonacci numbers) 만들기 - 메모이제이션
BEJM
2022. 3. 31. 10:10
피보나치 수란?
피보나치 수는 0번째 항이 0, 1번째 항이 1, 2번째 항이 1이며, 그 뒤의 모든 항은 바로 앞 두 항의 합인 수입니다.
점화식
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2)
피보나치 구현
피보나치는 같은 형태의 작업을 반복하기 때문에, 재귀함수를 이용해 구현하는 경우가 많습니다.
재귀함수를 이용한 피보나치 구현1
function fibonacci(num) {if (num === 0) return 0if (num === 1) return 1;return fibonacci(num-1)+fibonacci(num-2);}
소스코드를 보면 num이 0일때는 0, num이 1일때는 1을 반환합니다.
즉 num이 1이하일 경우, num을 반환한다고 볼 수 있습니다.
재귀함수를 이용한 피보나치 구현2
function factorial(num) {if (num <= 1) return num;return fibonacci(num-1)+fibonacci(num-2);}
메모이제이션
동일한 계산을 반복해야 하는 경우, 이전에 계산한 결과를 메모리에 저장해 동일한 계산의 반복을 방지하는 기술입니다.
재귀함수의 경우 동일한 계산이 많이 반복되어 메모이제이션을 사용하면 많은 계산을 줄일 수 있습니다.
메모이제이션을 사용한 피보나치 구현
function fibonacci(n) {let memo = [0, 1] // 이전 계산이 저장된 배열, 0번째와 1번째의 값은 0과 1let calFibo = (num) =>{if(memo[num] !== undefined) return memo[num] // 이전에 계산한 값이 있다면, 바로 반환memo[num] = calFibo(num-1) + calFibo(num-2) // 계산한 값이 없다면, 계산 후 memo에 저장return memo[num];}return calFibo(n);}