숫자 n을 입력받아 피보나치 수열의 첫 n개 항을 배열로 반환하는 재귀 함수 fibonacci()를 작성해 보겠습니다. 아래 코드는 매개변수 기본값과 재귀 호출을 활용해 간결하게 구현한 예시입니다.
코드 예제
const fibonacci = (n, res = [], count = 1, last = 0) => {
if(n){
return fibonacci(n-1, res.concat(count), count+last, count);
};
return res;
};
console.log(fibonacci(8));
console.log(fibonacci(0));
console.log(fibonacci(1));
console.log(fibonacci(19));
동작 원리
이 함수는 네 개의 매개변수를 사용합니다.
- n: 아직 계산해야 할 항의 개수
- res: 지금까지 계산된 피보나치 수열이 저장되는 결과 배열
- count: 현재 항의 값
- last: 바로 앞 항의 값
함수가 호출되면 n이 0이 될 때까지 자기 자신을 재귀적으로 호출하면서 현재 항의 값을 결과 배열에 추가하고, 다음 항의 값(count + last)과 현재 항의 값(count)을 함께 전달합니다. n이 0이 되면 더 이상 재귀 호출을 하지 않고 지금까지 쌓인 배열을 그대로 반환합니다. 덕분에 반복문 없이도 깔끔하게 피보나치 수열을 생성할 수 있습니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
[ 1, 1, 2, 3, 5, 8, 13, 21 ] [] [ 1 ] [ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181 ]
fibonacci(0)처럼 0을 전달하면 빈 배열이 반환되고, fibonacci(1)은 첫 번째 항만 담긴 배열을 반환하는 것을 확인할 수 있습니다.