Fibonacci-luvut Java-kielellä

Fibonacci Luvut Java Kielella



Fibonacci-luvut ovat tietty positiivisten (koko) kokonaislukujen sarja, joka alkaa nollasta positiiviseen äärettömään. Nykyinen Fibonacci-luku saadaan laskemalla yhteen kaksi välitöntä edellistä Fibonacci-lukua. Välittömästi edelliset kaksi Fibonacci-lukua eivät ole mitä tahansa lukuja.

Itse asiassa kaksi ensimmäistä Fibonacci-lukua ovat ennalta määritettyjä. Ensimmäinen Fibonacci-luku on 0 ja toinen Fibonacci-luku on 1. Nollapohjaisella indeksillä ja olettaen, että Fibonacci-luvut ovat taulukossa, niin:

indeksissä 0 , Fibonacci-luku on 0 , ( ennalta määritetty ) ;

indeksissä 1 , Fibonacci-luku on 1 , ( ennalta määritetty ) ;

indeksissä kaksi , Fibonacci-luku on 1 = 1 + 0 , ( määritelmän mukaan ) ;

indeksissä 3 , Fibonacci-luku on kaksi = 1 + 1 , ( määritelmän mukaan ) ;

indeksissä 4 , Fibonacci-luku on 3 = kaksi + 1 , ( määritelmän mukaan ) ;

indeksissä 5 , Fibonacci-luku on 5 = 3 + kaksi , ( määritelmän mukaan ) ;

indeksissä 6 , Fibonacci-luku on 8 = 5 + 3 , ( määritelmän mukaan ) ;

indeksissä 7 , Fibonacci-luku on 13 = 8 + 5 , ( määritelmän mukaan ) ;

indeksissä 8 , Fibonacci-luku on kaksikymmentäyksi = 13 + 8 , ( määritelmän mukaan ) ;

indeksissä 9 , Fibonacci-luku on 3. 4 = kaksikymmentäyksi + 13 , ( määritelmän mukaan ) ;

ja niin edelleen.







Ohjelmoinnissa näiden Fibonacci-lukujen nollaperusteisiin indekseihin käytetään muuttujaa n, ei i:tä. Ja sen myötä ensimmäiset kaksitoista Fibonaccin numeroa ovat:



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

Taulukon toisella rivillä on nollapohjaiset indeksit, joista jokaisella olisi ohjelmoinnissa muuttuja n. Ensimmäinen rivi antaa vastaavat Fibonacci-luvut. Joten Fibonacci-luvut eivät ole mitä tahansa numeroita. Ydinmäärittely alkaa 0:lla ensimmäiselle Fibonacci-luvulle ja 1:llä toiselle Fibonacci-luvulle. Loput numerot tuotetaan sieltä.



Fibonacci-luvut voidaan tuottaa O(n) ajassa ja myös O(1) ajassa. O(n) ajalle, jos n on esimerkiksi 12, tuotetaan ensimmäiset kaksitoista Fibonacci-lukua. O(1)-ajalle tuotetaan vain yksi Fibonacci-luku. Esimerkiksi jos n on 6, niin Fibonacci-luku 8 tuotetaan.





Tämä artikkeli selittää nämä kaksi tapaa tuottaa Fibonacci-lukuja Javassa.

Fibonacci-luvun kaava

Fibonacci-luvulle on olemassa matemaattinen kaava. Tämä kaava voidaan kirjoittaa kolmella rivillä tai yhdellä rivillä. Kolmella rivillä se kirjoitetaan seuraavasti:

missä F n on Fibonaccin luku nollaperusteisessa n:ssä th indeksi. Näin Fibonacci-luku määritellään.



Fibonacci-lukujen tuottaminen O(n) ajassa

Jos Fibonacci-luvut tuotetaan O(3) kertaa, luvut 0, 1, 1 tuotetaan; nämä ovat kolme ensimmäistä Fibonaccin numeroa. Viimeinen nollapohjainen n th indeksi tässä on 2. Jos Fibonacci-luvut tuotetaan O(7) kertaa, luvut 0, 1, 1, 2, 3, 5, 8 tuotetaan; nämä ovat ensimmäiset seitsemän Fibonaccin numeroa. Viimeinen nollapohjainen n th indeksi tässä on 6. Jos Fibonacci-luvut tuotetaan O(n) kertaa, luvut, 0, 1, 1, 2, 3, 5, 8 – – -, tuotetaan; nämä ovat ensimmäiset n Fibonacci-lukua. Viimeinen nollapohjainen n th indeksi tässä on n-1.

Luokan Java-menetelmä ensimmäisten n Fibonacci-luvun tuottamiseksi on:

luokkaa Fibonacci {
mitätön fibonacci ( int [ ] P ) {
int n = P. pituus ;
jos ( n > 0 )
P [ 0 ] = 0 ;
jos ( n > 1 )
P [ 1 ] = 1 ;
varten ( int i = kaksi ; i < n ; i ++ ) { //n=0 ja n=2 on otettu huomioon
int CurrNo = P [ i - 1 ] + P [ i - kaksi ] ;
P [ i ] = CurrNo ;
}
}
}

Luokka, Fibonacci, on yksityinen. The fibonacci () menetelmä ottaa taulukon P ja palauttaa void. Menetelmä alkaa määrittämällä taulukon pituus. Tämä n:n pituus on tarvittavien Fibonacci-lukujen lukumäärä. Ensimmäinen ja toinen Fibonacci-luku määritetään eksplisiittisesti ja asetetaan taulukon ensimmäiseen ja toiseen paikkaan.

Loput Fibonacci-luvuista alkaen kolmannesta (indeksi, n = 2) määritetään for-silmukassa ja asetetaan paikoilleen taulukossa. Joten funktion on palautettava void. For-silmukan päälause lisää kaksi edellistä numeroa.

Indeksimuuttujaa i on käytetty n:n sijaan selkeyden vuoksi.

Sopiva Java-pääluokka (Java-päämenetelmällä) on:

julkinen luokkaa Main {
julkinen staattinen mitätön pää ( merkkijono args [ ] ) {
int m = 12 ;
int [ ] arr = Uusi int [ m ] ;
Fibonacci obj = Uusi Fibonacci ( ) ;
obj. fibonacci ( arr ) ;
varten ( int i = 0 ; i < m ; i ++ )
Järjestelmä . ulos . Tulosta ( arr [ i ] + ' ' ) ;
Järjestelmä . ulos . println ( ) ;
}
}

Kun luvut on tuotettu fibonacci()-menetelmällä, Java-päämenetelmä lukee ne.

Yhden Fibonacci-luvun tuottaminen jatkuvassa ajassa

On olemassa matemaattinen kaava, jolla voidaan tuottaa Fibonacci-luku, kun sille annetaan vastaava nollapohjainen indeksi, n. Kaava on:

missä n on nollaperusteinen indeksi ja Fib n on vastaava Fibonacci-luku. 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, Fib n 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.

Koodattuna tämä kaava tuottaisi vain yhden Fibonacci-luvun n:lle. Jos tarvitaan useampi kuin yksi Fibonacci-luku, kaavan koodi on kutsuttava kerran jokaiselle vastaavalle indeksille.

Javassa tapa tuottaa vain yksi Fibonacci-luku on:

tuonti java.lang.* ;

luokkaa Fib {
kaksinkertainen fibNo ( int n ) {
kaksinkertainen FibN = ( Matematiikka . pow ( ( 1 + Matematiikka . sqrt ( 5 ) ) / kaksi , n ) Matematiikka . pow ( ( 1 - Matematiikka . sqrt ( 5 ) ) / kaksi , n ) ) / Matematiikka . sqrt ( 5 ) ;
palata FibN ;
}
}

Paketti java.lang.* piti tuoda ohjelman alussa. Tämä johtuu siitä, että paketissa on Math-luokka, jossa on teho (pow) ja neliöjuuri (sqrt) menetelmät. Tässä mukautettu Java-menetelmä toteuttaa matemaattisen kaavan suoraan.

Tämän funktion aikamonimutkaisuus on O(1), yhden pääoperaation vakio kesto. Sopiva Java-pääluokka, jossa on Java-päämenetelmä yllä olevalle menetelmälle, on:

julkinen luokkaa Main {
julkinen staattinen mitätön pää ( merkkijono args [ ] ) {
int N = yksitoista ;
Fib obj = Uusi Fib ( ) ;
kaksinkertainen oikein = obj. fibNo ( N ) ;
Järjestelmä . ulos . println ( oikein ) ;
}
}

Indeksi n = 11 lähetetään ja Fibonacci-luku 89 palautetaan. Lähtö on:

89.00000000000003

Tarpeettomat desimaaliluvut voidaan poistaa, mutta siitä keskustellaan toisella kertaa.

Johtopäätös

Fibonacci-luvut ovat tietty kokonaislukujen sarja. Saat nykyisen numeron lisäämällä välittömästi edellistä vastaavaa numeroa. Kaksi ensimmäistä Fibonacci-lukua, 0 ja 1, on ennalta ilmoitettu koko sarjalle. Loput Fibonacci-luvut tuotetaan sieltä.

Jos haluat tuottaa Fibonacci-lukuja indeksistä 2, joka vastaa indeksiä n-1, käytä for-silmukkaa päälauseen kanssa:

int CurrNo = P [ i - 1 ] + P [ minä – kaksi ] ;

missä currNo on nykyinen Fibonacci-luku ja P on taulukko n luvun tallentamiseen.

Jos haluat tuottaa vain yhden Fibonacci-luvun mistä tahansa nollapohjaisesta indeksistä n, käytä matemaattista kaavaa: