Fibonacci-luvut ovat tietty sarja, jossa ensimmäinen arvo on ennalta ilmoitettu 0:ksi ja toinen arvoksi 1. Loput luvut tuotetaan näistä kahdesta lisäämällä kaksi edellistä numeroa. Kaikki Fibonacci-luvut ovat positiivisia kokonaislukuja, jotka alkavat nollasta. Ensimmäiset kaksitoista Fibonacci-lukua ja kuinka ne saadaan, ovat seuraavat:
0
1
1 + 0 = 1
1 + 1 = 2
2 + 1 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
13 + 8 = 21
21 + 13 = 34
34 + 21 = 55
55 + 34 = 89
Ilman summalausekkeita nämä Fibonacci-luvut voidaan laittaa taulukkoon seuraavasti:
0 | 1 | 1 | kaksi | 3 | 5 | 8 | 13 | kaksikymmentäyksi | 3. 4 | 55 | 89 |
0 | 1 | kaksi | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | yksitoista |
Ensimmäisellä rivillä on Fibonacci-numerot. Toisella rivillä on nollapohjaiset indeksit olettaen, että Fibonacci-luvut ovat taulukossa.
Fibonacci-luvut voidaan tuottaa O(n)-ajassa ja O(1)-ajassa. Näissä aikakompleksisuuslausekkeissa n tarkoittaa n pääoperaatiota ja 1 tarkoittaa 1 pääoperaatiota. O(n:lla) tuotetaan n Fibonacci-lukua alkaen 0:sta. O(1:llä) tuotetaan yksi Fibonacci-luku vastaavasta indeksistä. Tästä syystä se vaatii vain yhden pääoperaation n:n pääoperaation sijaan.
Tämän artikkelin tarkoituksena on selittää, kuinka Fibonacci-lukuja tuotetaan kummallakin tavalla Pythonilla.
Fibonacci-luvun kaava
Fibonacci-luvun muodollinen määritelmä on:
missä F n on Fibonacci-luku nollaperusteisessa n Jos n on 1, vain 0 tulostettaisiin Fibonacci-lukuna. Jos n on 2, niin 0 ja 1 tulostettaisiin Fibonacci-lukuina tässä järjestyksessä. Jos n on 3, niin 0, 1 ja 1 tulostettaisiin Fibonacci-lukuina tässä järjestyksessä. Jos n on 4, niin 0, 1, 1 ja 2 tulostettaisiin Fibonacci-lukuina tässä järjestyksessä. Jos n on 5, niin 0, 1, 1, 2 ja 3 tulostetaan Fibonacci-lukuina tässä järjestyksessä. Jos n on 6, niin 0, 1, 1, 2, 3 ja 5 tulostettaisiin Fibonacci-lukuina tässä järjestyksessä – ja niin edelleen. Python-funktio, joka tuottaa ensimmäiset n Fibonacci-lukua, on: Se alkaa luomalla joukko n elementtiä, jotka kaikki alustetaan nolliksi. Tämä taulukko sisältää Fibonacci-luvut. Ensimmäinen Fibonacci-luku, 0, on jo olemassa. Toinen Fibonacci-luku, 1, annetaan seuraavalla lauseella (funktiossa). Sitten on for-silmukka, joka alkaa indeksistä 2 juuri ennen n:ää. Siinä on lausunto: Tämä lisää välittömästi kaksi edellistä numeroa. Koodi funktion kutsumiseksi ja ensimmäisten kahdentoista Fibonacci-numeron tulostamiseksi voi olla: N = 12 Lähtö on: On olemassa matemaattinen kaava, joka yhdistää nollapohjaisen indeksin sitä vastaavaan Fibonacci-lukuun. Kaava on: Huomaa, että yhtälön oikealla puolella ei ole 5:n neliöjuuri, joka korotetaan potenssiin n; se on suluissa oleva lauseke, joka nostetaan potenssiin n. Tällaisia ilmaisuja on kaksi. Jos n on 0, Fibn olisi 0. Jos n on 1, Fib n olisi 1. Jos n on 2, Fib n olisi 1. Jos n on 3, Fib n olisi 2. Jos n on 4, Fib n olisi 3 – ja niin edelleen. Lukija voi tarkistaa tämän kaavan matemaattisesti korvaamalla n:n eri arvoilla ja arvioimalla. n on nollaperusteinen indeksi tässä kaavassa. Python-koodi tälle kaavalle on: tuoda matematiikkaa Matemaattinen moduuli tuotiin. Siinä on neliöjuurifunktio. Operaattoria ** käytetään virtalähteenä. Funktio fibNo() toteuttaa kaavan suoraan. Sopiva kutsu ja tulostus fibNo()-funktiolle on: N = 11 Lähtö on: Tarpeettomat desimaaliluvut on mahdollista poistaa vastauksesta. Tämä on kuitenkin keskustelua toisen kerran. Jos eri Fibonacci-lukuja vaaditaan eri n-indeksille, funktio fibNo() on kutsuttava kerran jokaiselle n-indeksille, jotta saadaan eri vastaavat Fibonacci-luvut. Seuraava ohjelma tekee tämän nollapohjaisille indekseille, 7–9 (mukaan lukien): tuoda matematiikkaa Lähtö on: Huomaa, miten for-silmukka on koodattu Pythonissa. Ensimmäinen indeksi on 7. Seuraava indeksi on 8 ja viimeinen indeksi on 9. 10 alueen argumentissa on 9 + 1. Arvon sijainnissa 10 on oltava viimeinen nollaperusteinen indeksi plus 1. Ensimmäinen argumentti 7 on aloitusnollapohjainen indeksi. Fibonacci-luvut ovat tietty kokonaislukujen (positiivisten kokonaislukujen) sarja. Se alkaa 0:lla, jota seuraa 1 ehdoitta. Loput luvut kehitetään sieltä lisäämällä välittömästi edelliset kaksi numeroa. Saadaksesi ensimmäiset n Fibonacci-lukua, hyväksy 0 ja 1 kahdeksi ensimmäiseksi, sitten loput varten käytä for-silmukkaa lauseella, kuten: joka lisää välittömät kaksi edellistä numeroa. Jos haluat saada vain yhden Fibonacci-luvun nollapohjaisesta indeksistä n, käytä kaavaa:
Fibonacci-lukujen tuottaminen O(n) ajassa
arr = [ 0 ] * ( n )
arr [ 1 ] = 1
varten i sisään alue ( kaksi , n ) :
arr [ i ] = arr [ minä - 1 ] + arr [ minä - kaksi ]
palata arr
A = fibonacci (N)
i alueella (N):
tulosta (A[i], end=’ ‘)
Tulosta() Yhden Fibonacci-luvun tuottaminen jatkuvassa ajassa
FibN = ( ( ( 1 +math.sqrt ( 5 ) ) / kaksi ) ** n - ( ( 1 -math.sqrt ( 5 ) ) / kaksi ) ** n ) / math.sqrt ( 5 )
palata FibN
oikea = fibNo(N)
tulostaa (ret)
FibN = ( ( ( 1 +math.sqrt ( 5 ) ) / kaksi ) ** n - ( ( 1 -math.sqrt ( 5 ) ) / kaksi ) ** n ) / math.sqrt ( 5 )
palata FibN
varten i sisään alue ( 7 , 10 ) :
Tulosta ( fibNo ( i ) , loppu = '' )
Tulosta ( )
Johtopäätös