이번 글에서는 숫자를 입력받아 해당 숫자가 피보나치 수열에 포함되어 있는지 여부를 불리언(Boolean) 값으로 반환하는 자바스크립트 함수를 작성해 보겠습니다.
문제 정의
함수는 하나의 숫자를 매개변수로 받으며, 그 숫자가 피보나치 수열에 속하면 true, 속하지 않으면 false를 반환해야 합니다.
예를 들어 다음과 같이 함수를 호출한다면,
fibonacci(12);
fibonacci(89);
fibonacci(55);
fibonacci(534);
출력 결과는 다음과 같아야 합니다.
false
true
true
false
재귀 함수를 활용한 해결 방법
피보나치 수열은 첫 두 항이 0과 1이며, 이후의 모든 항은 바로 앞의 두 항을 더한 값으로 정의됩니다. 즉, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... 와 같은 형태로 진행됩니다.
이 성질을 활용하면 재귀 호출을 통해 목표 숫자까지 수열을 전개해 가면서 일치 여부를 확인할 수 있습니다. 아래 코드에서 count는 현재 항, last는 바로 앞 항을 나타냅니다. count가 query보다 작은 동안에는 수열을 계속 전개하고, count가 query와 같아지면 true를, 수열이 query를 초과하게 되면 false를 반환합니다.
예제 코드
const fibonacci = (query, count = 1, last = 0) => {
if(count < query){
return fibonacci(query, count+last, count);
};
if(count === query){
return true;
}
return false;
};
console.log(fibonacci(12));
console.log(fibonacci(55));
console.log(fibonacci(89));
console.log(fibonacci(534));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
false
true
true
false
이처럼 재귀 함수를 사용하면 별도의 배열이나 반복문 없이도 간결하게 피보나치 수 판별 로직을 구현할 수 있습니다. 다만 매우 큰 숫자를 검사할 때는 재귀 호출의 깊이가 깊어질 수 있으므로, 상황에 따라 반복문 기반 구현을 함께 고려하는 것이 좋습니다.