Fibonacci-luvut Python-kielellä

Fibonacci Luvut Python Kielella



'Jos 0 lisätään 1:een, vastaus olisi 1. Jos vastaus 1 ja lisäys (ei lisäys) lasketaan yhteen, uusi vastaus on 2. Jos tämä uusi vastaus ja sen lisäys lasketaan yhteen, vastaus olisi 3. Jos tämä uusi vastaus ja sen lisäys lasketaan yhteen, vastaus olisi 5.'

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

Fibonacci-lukujen tuottaminen O(n) ajassa

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:

def fibonacci ( n ) :
arr = [ 0 ] * ( n )
arr [ 1 ] = 1
varten i sisään alue ( kaksi , n ) :
arr [ i ] = arr [ minä - 1 ] + arr [ minä - kaksi ]
palata arr

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:

arr [ i ] = arr [ minä - 1 ] + arr [ minä - kaksi ]

Tämä lisää välittömästi kaksi edellistä numeroa.

Koodi funktion kutsumiseksi ja ensimmäisten kahdentoista Fibonacci-numeron tulostamiseksi voi olla:

N = 12
A = fibonacci (N)
i alueella (N):
tulosta (A[i], end=’ ‘)
Tulosta()

Lähtö on:

0 1 1 kaksi 3 5 8 13 kaksikymmentäyksi 3. 4 55 89

Yhden Fibonacci-luvun tuottaminen jatkuvassa ajassa

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

def fibNo ( n ) :
FibN = ( ( ( 1 +math.sqrt ( 5 ) ) / kaksi ) ** n - ( ( 1 -math.sqrt ( 5 ) ) / kaksi ) ** n ) / math.sqrt ( 5 )
palata FibN

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
oikea = fibNo(N)
tulostaa (ret)

Lähtö on:

89.00000000000003

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

def fibNo ( n ) :
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 ( )

Lähtö on:

13,000000000000002 21,000000000000004 34,00000000000001

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.

Johtopäätös

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:

arr [ i ] = arr [ minä - 1 ] + arr [ minä - kaksi ]

joka lisää välittömät kaksi edellistä numeroa.

Jos haluat saada vain yhden Fibonacci-luvun nollapohjaisesta indeksistä n, käytä kaavaa: