아래와 같이 정의된 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다.
let output = fibonacci(0);
console.log(output); // --> 0
output = fibonacci(1);
console.log(output); // --> 1
output = fibonacci(5);
console.log(output); // --> 5
output = fibonacci(9);
console.log(output); // --> 34
function fibonacci(n) {
// TODO: 여기에 코드를 작성합니다.
/**
* 피보나치 수열 중 n번째 항의 수를 리턴해야 합니다.
* (n - 1) + (n - 2) === n번째 항의 수
*
*/
if(n === 0) return 0;
if(n === 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
//dynamic with meoization
//이미 해결한 문제의 정답을 따로 기록해두고,
//다시 해결하지 않는 기법
function fibonacci(n) {
const memo = [0, 1]; // 피보나치 수열에 0, 1번째 수는 알고 있으므로 메모해둔다.
const aux = n => {
if (memo[n] !== undefined) return memo[n];//메모장에 n번째 수가 존재한다면 그 수 리턴
memo[n] = aux(n - 1) + aux(n - 2);
//메모장에 n번째 수가 존재하지 않는다면 aux 함수를 재귀 호출
//base조건은 메모장에 n번째 수가 존재하는 경우. 즉, aux(1) === 1 , aux(0) === 0이 된다.
return memo[n];
}
return aux(n);//결국 aux(n)을 한다면 메모장에 n번째 수가 계산되어 리턴된다.
}