본문으로 건너뛰기
AZ Tools

피보나치 수열 생성기

처음 N개의 피보나치 수 — 0, 1, 1, 2, 3, 5, 8 … — 를 큰 정수로 정확하게 생성하고, 마지막 항, 누적 합, 마지막 두 항의 황금비 근삿값을 보여줍니다.

마지막 항34
합88
황금비 φ1.619047
수열

사용법

  1. 생성할 항의 개수를 입력합니다 (1부터 1000까지).
  2. 마지막(N번째) 항, 나열된 모든 항의 합, 황금비 근삿값을 확인합니다.
  3. 전체 수열을 스크롤하고 한 번에 복사합니다.
  4. 10개 항(0, 1, 1, 2, 3, 5, 8, 13, 21, 34 — 합 88)으로 출력을 확인해 보세요.

자세한 설명

펼치기

수열은 0, 1로 시작하고 그 뒤의 모든 항은 앞의 두 항을 더한 값입니다. 몇 개까지 원하는지 입력하면 전부 나열해 주고, 마지막 항과 누적 합, 그리고 마지막 두 항의 비를 함께 보여 줍니다. 그 비가 바로 황금비 φ ≈ 1.618034로 수렴하는 수입니다. 모든 계산은 임의 정밀도 정수로 이뤄지므로 백 번째든 천 번째든 반올림이 아니라 정확한 값입니다.

그 정확함이야말로 스프레드시트 대신 도구를 쓸 이유 전부입니다. 피보나치 수는 배정도 연산의 범위를 금방 넘어섭니다. F(78)은 8,944,394,323,791,464로 배정도가 정확히 담을 수 있는 53비트 안에 아직 들어오지만, F(79)는 14,472,334,024,676,221로 들어오지 못합니다. 그 지점부터 부동소수점으로 계산하는 계산기는 그럴듯해 보이면서 끝자리가 틀린 수를, 아무 경고 없이 돌려줍니다. F(100)은 354,224,848,179,261,915,075로 스물한 자리이고, F(1000)은 209자리입니다.

φ로의 수렴은 빠르고, 출력에서 지켜볼 만합니다. 오차는 부호를 번갈아 가며 매 단계 φ² ≈ 2.618배씩 줄어듭니다. 열 번째 항에서 약 1.5 × 10⁻⁴, 스무 번째에서 10⁻⁸, 서른 번째에서 10⁻¹² 어긋납니다. 서른 번째쯤이면 배정도가 표현할 수 있는 자릿수보다 더 많은 자리에서 φ와 일치하므로, 수열이 계속 이어지는 동안에도 비율 열은 한참 전에 변화를 멈춥니다.

단순한 호기심 이상인 성질이 둘 있습니다. 피보나치 수를 어떤 수로 나눈 나머지는 주기를 이룹니다. 마지막 한 자리의 주기는 정확히 60이라서 F(n)과 F(n+60)은 언제나 같은 숫자로 끝나는데, 긴 목록을 빠르게 검산하는 방법이 됩니다. 그리고 φ가 1마일에 해당하는 킬로미터 수와 가깝기 때문에, 이웃한 두 항이 둘 사이의 환산이 됩니다. 5마일은 약 8 km, 8마일은 약 13 km, 13마일은 약 21 km입니다. 비 1.6, 1.625, 1.615가 실제 값 1.609를 양쪽에서 감싸므로, 이 요령은 다섯 번째 항부터 대략 1퍼센트 이내로 정확합니다.

자주 묻는 질문

수열은 어디서 시작하나요?

이 생성기는 표준 관례인 F(0) = 0, F(1) = 1을 사용하므로 처음 열 개 항은 0, 1, 1, 2, 3, 5, 8, 13, 21, 34입니다. '마지막 항' 통계는 생성한 목록의 마지막 수입니다.

큰 항도 정확한가요?

네. 계산에 자바스크립트 큰 정수를 사용하므로 수백 자리 항도 부동소수점 반올림 없이 정확히 계산됩니다. 예를 들어 F(100)은 — 목록이 F(0)부터 시작하므로 101번째 값으로 나타납니다 — 정확히 354224848179261915075입니다.

황금비 숫자는 무엇인가요?

마지막 항을 그 앞 항으로 나눈 비입니다. 수열이 커질수록 이 비는 황금비 φ ≈ 1.6180339887로 수렴하며, 피보나치 수와 φ가 밀접하게 연결되는 이유입니다.

재귀 정의가 이걸 계산하는 나쁜 방법인 이유는?

앞의 두 항을 다시 계산해서 각 항을 구하면 같은 값을 지수적으로 여러 번 다시 유도하게 되기 때문이다. 서른 번째 항은 백만 번이 넘는 호출이 들고, 쉰 번째는 아예 닿지 못한다. 마지막 두 값만 들고 아래에서부터 반복하면 어떤 항이든 그 번호만큼의 단계로 얻는다. 정의의 모양과 알고리즘의 모양이 별개의 문제라는 것을 보여주는 표준적인 예다.

항이 이렇게 빨리 커지는 이유는?

각 항이 바로 앞 항에 황금비를 곱한 값에 매우 가깝기 때문이고, 그래서 증가가 선형이 아니라 지수적이다. 자릿수가 대략 다섯 항마다 하나씩 늘어난다. 여기서 정확한 산술이 중요한 이유가 이것이다. 배정밀도 실수는 78번째 항 언저리에서 정밀도를 잃고, 그 뒤로는 그럴듯해 보이는 근삿값이지 그 수가 아니다.

관련 도구