Fibonacci-számok

A Fibonacci-számok (ejtsd: fibonaccsi) a matematikában az egyik legismertebb másodrendben rekurzív sorozat elemei. A nulladik eleme 0, az első eleme 1, a további elemeket az előző kettő összegeként kapjuk. Képletben:

A Fibonacci-számok végtelen, növekvő sorozatot alkotnak; ennek első néhány eleme a nulladiktól kezdve 0, 1, 1, 2, 3, 5, 8, 13, 21, 34. Fibonacci-számok több nagy listája is szabadon letölthető az internetről.

Eredet 
A sorozatot először 1150-ben írta le két indiai matematikus, Gopala és Hemacsandra, akik a szanszkrit költészet elméleti kérdéseit vizsgálva ütköztek egy összegre bontási problémába (hányféleképpen lehet rövid és hosszú szótagokkal kitölteni egy adott időtartamot, ha egy hosszú szótag két rövidnek felel meg?). Nyugaton tőlük függetlenül találta meg 1202-ben Fibonacci, aki Liber Abaci (Könyv az abakuszról) című művében egy képzeletbeli nyúlcsalád növekedését adta fel gyakorlófeladatként: hány pár nyúl lesz n hónap múlva, ha feltételezzük, hogy
 az első hónapban csak egyetlen újszülött nyúlpár van;
 az újszülött nyúlpárok két hónap alatt válnak termékennyé;
 minden termékeny nyúlpár minden hónapban egy újabb párt szül;
 és a nyulak örökké élnek?

Kepler 1611-es De nive sexangula (A hatszögletű hópehelyről) című könyvében újra felfedezte, és különféle természeti jelenségekkel hozta kapcsolatba.

A ma használt elnevezést E. Lucastól kapta.

Binet-formula 
A szomszédos Fibonacci-számok aránya () -hez, az aranymetszés értékéhez tart:

azaz
,
ennek a másodfokú egyenletnek pedig éppen  és  a megoldásai.

(Valójában ennél több is elmondható: az  törtek éppen a  lánctörtbe fejtésével kapott közelítő törtek.)

Az egyenlet mindkét oldalát -nel beszorozva a

egyenlőséget kapjuk.

Ez azt jelenti, hogy a  és a  sorozatok (és minden lineáris kombinációjuk) kielégítik a Fibonacci-rekurziót.

Az együtthatók megfelelő megválasztásával elérhetjük, hogy a helyes  és  értékeket kapjuk:

Az így kapott

képlet a Fibonacci-számok zárt alakja, ezt nevezzük Binet-formulának.

Ugyanezt a képletet kapjuk a generátorfüggvények módszerével is.

Ha n tart a végtelenhez, a második tag nullához konvergál, azaz a Fibonacci-számok a  sorozathoz tartanak, ebből adódik az arányuk konvergenciája. Mi több, a második tag már kezdetben is olyan kicsi, hogy a Fibonacci-számokat úgy is megkaphatjuk, hogy csak az első tagot számoljuk ki, és kerekítünk a legközelebbi egészre.

A Fibonacci-sorozat leírható lineáris rekurziók kétdimenziós rendszerével:

vagy

Az A mátrix sajátértékei  és , a sajátvektorok pedig  és .

Általánosítások 
A Fibonacci-sorozat kifejezést általánosabb értelemben minden olyan g sorozatra alkalmazzuk, ami a  rekurzív képlettel adható meg. Belátható, hogy minden ilyen sorozat átírható  alakba, más szóval a Fibonacci-sorozatok egy vektorteret alkotnak az  és  sorozatokkal mint bázissal.

A Fibonacci-sorozatok további általánosítása a Lucas-sorozatok.

Egy másfajta általánosítás a Fibonacci-polinomok.

Lucas-számok 
Az , ,  Fibonacci-sorozat elemeit Lucas-számoknak nevezzük. Először Euler írta le őket 1748-ban, az Introductio in Analysin Infinitorum c. művében. Jelentőségük, hogy az aranymetszést n-edik hatványra emelve az eredmény  lesz.

Néhány összefüggés a Fibonacci- és a Lucas-számok között:

.
.

.
.

Polibonacci-számok 
A Tribonacci-számokat a Fibonacci-számokhoz hasonlóan számítjuk, de kettő helyett három korábbi elemet adunk össze. (Az első néhány elem: 1, 1, 2, 4, 7, 13, 24, 44, 81, 149…) OEIS számuk A000073. Hasonlóan definiáljuk a tetranacci, pentanacci stb. számokat, de a kutatók nem tartják őket különösebben érdekesnek.

Kiterjesztés a negatív számokra 
Ha a számok generálásához használt képletet a sorozat korábbi indexeinek előállításához használjuk, akkor megkapjuk a negatív Fibonacci-számokat, azaz a „negafibonacci” sorozatot.

Kiterjesztés a valós számokra 
A Binet-formulából kiindulva a Fibonacci-számok kiterjeszthetőek sorozatból valós függvénnyé:

Tulajdonságai 
Az egyetlen Fibonacci-szám, ami egyben négyzetszám is (a 0-t és az 1-et kivéve) a 144. 1982-ben igazolta Pethő Attila, hogy csak véges sok Fibonacci-szám teljes hatvány. Legújabban Y. Bugeaud, M. Mignotte és S. Siksek bebizonyította, hogy csak 8 és 144 teljes hatványok.

 számjegyeinek száma éppen  tizedestört alakjának első n számjegye.

 számjegyeinek száma éppen  egészrésze, ha  és  az aranymetszés értéke - mivel a Fibonacci-számok a  sorozathoz tartanak.

Azonosságok 

 (Cassini-azonosság, a korábbi mátrixazonosságból a két oldal determinánsát véve nyerhető.) Általánosabb formája:  (Catalan-azonosság).
 (d'Ocagne-azonosság)
, amiből adódik, hogy . Ennél több is igaz: egy tetszőleges k-ra , továbbá .
Annak az n×n-es mátrixnak, aminek a főátlójába 1-et, a főátló fölötti és alatti mezőkbe pedig i-t írtunk, a determinánsa éppen .
Összefüggés a Csebisev-polinomokkal:

Generátorfüggvény 
A Fibonacci-sorozat generátorfüggvénye, az  hatványsor  esetén az alábbi zárt alakba írható:
.

Ebből  mellett adódik, hogy .

Reciprokok összege 
A Fibonacci-számok reciprokainak összegéből képzett sor konvergens:

(OEIS: A079586)

Erdős Pál vetette fel a kérdést, hogy irracionális-e ez a szám, és R. André-Jeannin bizonyította be 1989-ben, hogy az. Zárt képletet nem ismerünk rá.

Repfigitek 
A repfigitek (repetitive Fibonacci-like digit, ismétlődő Fibonacci-szerű számjegy) vagy Keith-számok olyan számok, amiknek a számjegyeiből egy lineáris rekurzív sorozatot alkotva a sorozat tartalmazza magát a számot. A kétjegyű repfigitek (ezeknél a lin. rek. sorozat Fibonacci-sorozat): 14, 19, 28, 47, 61, 75.

(OEIS: A007629)

Fibonacci-számok kiszámítása

Rekurzív eljáráshívással 
A rekurzív implementáció a legegyszerűbb, de közvetlenül nem alkalmas nagy Fibonacci-számok kiszámítására, mert a korábbi Fibonacci-számokat sokszor ki kell számítani hozzá, amitől a futásidő exponenciálissá válik, mint például az alábbi Perl illetve Java implementációkban:
# Exponenciális futásidejű rekurzív eljárás
# a Fibonacci-számok kiszámítására.
sub fibonacci {
    my $n = shift;
    if ( (0 == $n) || (1 == $n) ) {
        return $n;
    } else {
        return &fibonacci($n-1) + &fibonacci($n-2);
    }
}
/**
 * Exponenciális futásidejű rekurzív eljárás
 * a Fibonacci-számok kiszámítására.
 */
public int fibonacci(int n) {
    if ( (0 == n) || (1 == n) ) {
        return n;
    } else {
        return fibonacci(n-1) + fibonacci(n-2);
    }
}
(Nem exponenciális a futásidő, ha a használt programnyelv „megjegyzi” az egyszer már kiszámított értékeket – ez a helyzet például bizonyos funkcionális nyelveknél.)

Ciklussal 
Lineáris futásidő érhető el két változó használatával, amelyek kezdetben 0 és 1 értékeket kapnak, majd az elsőt minden lépésben felülírjuk a másodikkal, a másodikat pedig a kettő összegével.
Ezt szemlélteti az alábbi Perl és Java implementáció:
# Lineáris futásidejű eljárás ciklussal
# a Fibonacci-számok kiszámítására.
sub fibonacci {
    my $n = shift;
    ($F, $prev) = (0, 1);
    for ($i = 0; $i < $n ; ++$i) {
        ( $F, $prev ) = ( $F + $prev, $F );
    }
    return $F;
}
/**
 * Lineáris futásidejű eljárás ciklussal
 * a Fibonacci-számok kiszámítására.
 */
public int fibonacci(int n) {
    int a = 0, b = 1, x = 0;
    while (x++ < n) 
    {
        b += a;
        a = b-a;
    }
    return a;
}
public int fibonacci(int n) {
    int F = 0;
    int prev = 1;
    int next;
    for (int i = 0; i < n ; ++i) {
        next = F + prev;
        prev = F;
        F = next;
    }
    return F;
}

Gyors hatványozással 
Nagy -re  szorzással megkaphatjuk, ha az alábbi képletből számoljuk gyors hatványozással:

C++ nyelven történő implementációja:
//
// 2x2-es mátrix megvalósítása
// [a b]
// [c d]
// alakban.
//
struct Matrix {
    int a,b,c,d;
    Matrix operator* (const Matrix& m) const {
        return {(a*m.a+b*m.c), (a*m.b+b*m.d), (c*m.a+d*m.c), (c*m.b+d*m.d)};
    }
};

//
// Gyorshatványozás
//
Matrix fastpow(Matrix alap, int kitevo)
{
  if(kitevo==0) return {1,0,0,1};
  if(kitevo==1) return alap;
  
  Matrix fele=fastpow(alap,kitevo/2);
  Matrix hatvany=fele*fele;
  
  if(kitevo%2) hatvany=hatvany*alap;
  
  return hatvany;
}

//
// F(n) megadása, O(log n) művelettel
//
int fibonacci(int n)
{
	return fastpow({1,1,1,0}, n).b;
}

Binet-formulával 
A Binet-formula használata konstans futásidejű megoldást eredményez, de mégsem célszerű, mert a lebegőpontos számábrázolás általában nem elég pontos hozzá, és a felgyülemlő kerekítési hibák miatt téves eredmény adódhat.

Alkalmazások 
A Fibonacci-számoknak nagy jelentőségük van az euklideszi algoritmus futásidejének elemzésében: az algoritmus akkor a leglassabb, ha két szomszédos Fibonacci-szám legnagyobb közös osztóját kell kiszámolni.

Matyijaszevics kimutatta, hogy a Fibonacci-számok diofantoszi halmazt alkotnak, és ebből kiindulva válaszolta meg Hilbert tizedik problémáját.

A Pascal-háromszögben bizonyos átlók mentén összegezve a számokat Fibonacci-számokat kapunk.

Egy n hosszú szakaszt -féleképpen lehet kirakni 1 és 2 hosszú szakaszokból.

Egy 2×n-es sakktáblát 2×1-es dominókkal -féleképpen lehet lefedni (Dickau).

Az 1, 2, … n számokból -féleképp lehet kiválasztani egy részhalmazt úgy, hogy ne kerüljenek bele szomszédos számok (1-et és n-t nem szomszédosnak tekintve).

Azoknak a bitsorozatoknak a száma, amikben nincs két egymást követő 0, ; annak az esélye, hogy n egymást követő pénzfeldobás során nem kapunk kétszer egymás után fejet, .

A zenében néha hangolásra használják, máskor időtartamok arányainak meghatározására. Egy példa erre Bartók Béla Zene húros hangszerekre, ütőkre és cselesztára című műve.

Minden pozitív egész szám felírható különböző Fibonacci-számok összegeként; ha a Fibonacci-számok között nem lehet két egymást követő, akkor a felírás egyértelmű. Ez a Zeckendorf-tétel, maga a felírás pedig Zeckendorf-reprezentáció vagy Fibonacci-számrendszer néven ismeretes.

A mérföld és a kilométer közötti váltószám (1,609) közel van az aranymetszéshez, ezért a kettő közötti átváltás közelíthető egy bitenkénti eltolás művelettel a Fibonacci-számrendszerben.

Fibonacci-spirálok 
A Fibonacci-spirál egy olyan logaritmikus spirál, ami egy negyedfordulat alatt nő a -szeresére (azaz egy  egyenletű spirál). Jól közelíthető az arany téglalap segítségével.

A Fibonacci-spirálon egyenlő távolságra pontokat elhelyezve azok „spirálkarokká” állnak össze, és ezen karok száma Fibonacci-szám lesz.

A Fibonacci-spirál mentén elhelyezett gömbök optimális elrendezést adnak abban az értelemben, hogy nagyon sok gömböt elhelyezve is azok egyenletesen oszlanak el.

Fibonacci-számok a természetben 
A virágszirmok száma gyakran Fibonacci-szám: például a liliomnak, a nősziromnak és a hármassziromnak három; a haranglábnak, a boglárkának, a larkspurnak és a vadrózsának öt; a szarkalábnak, a vérpipacsnak és a pillangóvirágnak nyolc; a jakabnapi aggófűnek, a hamvaskának és a körömvirágnak 13; az őszirózsának, a borzas kúpvirágnak és a cikóriának 21; a fodroslevelű margitvirágnak, az útilapunak és egyes százszorszépeknek 34; más százszorszép-fajoknak pedig 55 vagy 89 szirma van.

Fibonacci-spirálba rendeződnek például a fenyőtoboz és az ananász pikkelyei, a napraforgó magjai, a málna szemei, a karfiol rózsái és egyes kaktuszok tüskéi. A nautiluszok háza is hasonlít a Fibonacci-spirálhoz, de nem egy negyed, hanem egy teljes kör alatt nő meg a sugár -szeresére. 

A növények szárán az egymást követő levelek elfordulása (a phyllotaxis) többnyire (egyes becslések szerint 90%-ban)  teljeskör (például szilfa és hárs esetén 1/2, bükknél, mogyorónál és szedernél 1/3, tölgynél, almánál, cseresznyénél és meggynél 2/5, nyárnál, rózsánál és baracknál 3/8, fűznél és mandulánál 5/13). Ezek az arányok éppen a  lánctörtbe fejtésekor kapott közelítő törtek ( az aranymetszés).

Przemyslaw Prusinkiewicz szerint ezen jelenségek egy része megmagyarázható szabad csoportok bizonyos algebrai megkötéseinek kifejeződéseként, konkrétabban bizonyos Lindenmayer-nyelvtanokként. A fraktálgeometriában a Fuchs-csoportok és a Klein-csoportok tanulmányozása közben találkozhatunk Fibonacci-számokkal. 

Egy méh n-generációs őseinek a száma az n-edik Fibonacci-szám.

Fibonacci-számok az irodalomban 
A Fibonacci-sorozatnak fontos szerepe van Dan Brown bestsellerében, A da Vinci-kódban és Darren Aronofsky filmjében, a π-ben.
Esterházy Péter: Harminchárom változat Haydn-koponyára. (Színdarab, 2009.)

Fibonacci-számok szerepe Bartók zenéjében 
Lendvai Ernő magyar zenetörténész Bartók Béla muzsikáját elemző könyvében mutatja be azt, hogyan tagolta zeneműveiben az egyes zenei gondolatok ütemsorrendjét a Fibonacci-szám hosszúságú szakaszok fölhasználásával Bartók. A Lendvai Ernő által felfedezett Fibonacci szerkezetelméleti összefüggéseket Bartók ösztönösen alkalmazta zenéjének formai arányrendszerében.

Jegyzetek

Kapcsolódó szócikkek 
 aranymetszés
 levélállás
 Zene húros hangszerekre, ütőkre és cselesztára
 Fibonacci-kupac
 Saxon-Szász János polidimenzionális mezői
 OEIS
 Zeckendorf-tétel

Források 
 D. E. Knuth: A számítógép-programozás művészete I.
 Gerőcs László: A Fibonacci-sorozat és általánosításai, Tankönyvkiadó, Budapest, 1988.
 Török Judit: A Fibonacci-sorozat, Tankönyvkiadó, Budapest, 1984.
 Bérczi Szaniszló: Sejtautomaták: Fibonacci növényeken át. Iskolakultúra. IV. No. 7. 16-32. o. (HU ) 1994.
 Lendvai Ernő: Bartók dramaturgiája. Zeneműkiadó, Budapest, 1964.
 Lovász – Pelikán – Vesztergombi: Diszkrét matematika. 74-84. old. Typotex Kiadó, 2006. 
 Hrant Arakelian. Mathematics and History of the Golden Section, Logos 2014, 404 p.

További információk 
 Fibonacci numbers az On-Line Encyclopedia of Integer Sequences (OEIS) oldalán 
 Pravin Chandra and Eric W. Weisstein  Fibonacci Number. From MathWorld 
 Fibonacci Numbers and the Golden Section
 The Fibonacci Quarterly – egy tudományos folyóirat, ami a Fibonacci-számokkal foglalkozik
 GoldenNumber.net
 Museum of Harmony and Golden Section
 Fibonacci Flim-Flam – Fibonacci-számok és áltudomány
 Fibonacci Spirals – Fibonacci-spirálokon alapuló képek
 The Golden Mean and the Physics of Aesthetics
 Hemachandra's application to Sanskrit poetry (pdf)

Nevezetes számsorozatok