Fibonacci-tall på Java-språk

Fibonacci Tall Pa Java Sprak



Fibonacci-tallene er en bestemt sekvens av positive (hele) heltall, som begynner fra null til positiv uendelig. Det nåværende Fibonacci-nummeret oppnås ved å legge til de to umiddelbart foregående Fibonacci-tallene. De umiddelbare to foregående Fibonacci-tallene er ikke hvilke som helst tall.

Faktisk er de to første Fibonacci-tallene forhåndsdefinerte. Det første Fibonacci-tallet er 0 og det andre Fibonacci-tallet er 1. Med nullbasert indeksering og forutsatt at Fibonacci-tall er i en matrise, så:

ved indeks 0 , er Fibonacci-tallet 0 , ( forhåndsdefinert ) ;

ved indeks 1 , er Fibonacci-tallet 1 , ( forhåndsdefinert ) ;

ved indeks to , er Fibonacci-tallet 1 = 1 + 0 , ( per definisjon ) ;

ved indeks 3 , er Fibonacci-tallet to = 1 + 1 , ( per definisjon ) ;

ved indeks 4 , er Fibonacci-tallet 3 = to + 1 , ( per definisjon ) ;

ved indeks 5 , er Fibonacci-tallet 5 = 3 + to , ( per definisjon ) ;

ved indeks 6 , er Fibonacci-tallet 8 = 5 + 3 , ( per definisjon ) ;

ved indeks 7 , er Fibonacci-tallet 1. 3 = 8 + 5 , ( per definisjon ) ;

ved indeks 8 , er Fibonacci-tallet tjueen = 1. 3 + 8 , ( per definisjon ) ;

ved indeks 9 , er Fibonacci-tallet 3. 4 = tjueen + 1. 3 , ( per definisjon ) ;

og så videre.







I programmering brukes variabelen n, og ikke i for de nullbaserte indeksene for disse Fibonacci-tallene. Og med det er de første tolv Fibonacci-tallene:



0 1 1 to 3 5 8 1. 3 tjueen 3. 4 55 89
0 1 to 3 4 5 6 7 8 9 10 elleve

Den andre raden i tabellen gir de nullbaserte indeksene, som hver vil ha variabelen n i programmering. Den første raden gir de tilsvarende Fibonacci-tallene. Så Fibonacci-tall er ikke hvilke som helst tall. Kjernedefinisjonen begynner med 0, for det første Fibonacci-tallet og 1 for det andre Fibonacci-tallet. Resten av tallene er produsert derfra.



Fibonacci-tall kan produseres i O(n)-tid og også i O(1)-tid. For O(n) tid, hvis n for eksempel er 12, vil de første tolv Fibonacci-tallene bli produsert. For O(1)-tid produseres bare ett Fibonacci-tall. For eksempel, hvis n er 6, vil Fibonacci-tallet 8 bli produsert.





Denne artikkelen forklarer disse to måtene å produsere Fibonacci-tall på i Java.

Formel for et Fibonacci-nummer

Det er en matematisk formel for et Fibonacci-tall. Denne formelen kan skrives på tre linjer eller én linje. På tre linjer er det skrevet som:

hvor F n er Fibonacci-tallet ved den nullbaserte n th indeks. Dette er hvordan Fibonacci-tallet er definert.



Produserer Fibonacci-tall på O(n)-tid

Hvis Fibonacci-tall skal produseres i O(3) ganger, vil tallene 0, 1, 1 bli produsert; det er de tre første Fibonacci-tallene. Den siste nullbaserte n th indeks her, er 2. Hvis Fibonacci-tall skal produseres i O(7) ganger, vil tallene 0, 1, 1, 2, 3, 5, 8 bli produsert; det er de første syv Fibonacci-tallene. Den siste nullbaserte n th indeks her, er 6. Hvis Fibonacci-tall skal produseres i O(n) ganger, vil tallene 0, 1, 1, 2, 3, 5, 8 – – -, bli produsert; det er de første n Fibonacci-tallene. Den siste nullbaserte n th indeksen her er n-1.

Java-metoden i en klasse for å produsere de første n Fibonacci-tallene er:

klasse Fibonacci {
tomrom fibonacci ( int [ ] P ) {
int n = P. lengde ;
hvis ( n > 0 )
P [ 0 ] = 0 ;
hvis ( n > 1 )
P [ 1 ] = 1 ;
til ( int Jeg = to ; Jeg < n ; Jeg ++ ) { //n=0 og n=2 har blitt vurdert
int currNo = P [ Jeg - 1 ] + P [ Jeg - to ] ;
P [ Jeg ] = currNo ;
}
}
}

Klassen, Fibonacci er privat. De fibonacci() metoden tar matrisen P og returnerer void. Metoden begynner med å bestemme lengden på matrisen. Denne lengden på n er antallet Fibonacci-tall som kreves. Det første og andre Fibonacci-tallet bestemmes eksplisitt og settes inn i den første og andre posisjonen i matrisen.

Resten av Fibonacci-tallene som begynner fra den tredje (indeks, n = 2) bestemmes i en for-løkke og settes i deres posisjoner i matrisen. Så funksjonen må returnere ugyldig. Hovedsetningen i for-løkken legger til de to foregående tallene.

Indeksvariabelen, i, har blitt brukt i stedet for n, for klarhet.

En passende Java Main-klasse (med Java-hovedmetoden) er:

offentlig klasse Hoved {
offentlig statisk tomrom hoved- ( String args [ ] ) {
int m = 12 ;
int [ ] arr = ny int [ m ] ;
Fibonacci obj = ny Fibonacci ( ) ;
obj. fibonacci ( arr ) ;
til ( int Jeg = 0 ; Jeg < m ; Jeg ++ )
System . ute . skrive ut ( arr [ Jeg ] + ' ' ) ;
System . ute . println ( ) ;
}
}

Etter at tallene er produsert med fibonacci()-metoden, leser Java-hovedmetoden dem opp.

Produserer ett Fibonacci-nummer i konstant tid

Det er en matematisk formel som kan brukes til å produsere et Fibonacci-tall, når gitt den tilsvarende nullbaserte indeksen, n. Formelen er:

hvor n er den nullbaserte indeksen og Fib n er det tilsvarende Fibonacci-tallet. Merk at på høyre side av ligningen er det ikke kvadratroten av 5 som heves til potensen n; det er uttrykket i parentes som heves til potensen n. Det er to slike uttrykk.

Hvis n er 0, vil Fib n ville være 0. Hvis n er 1, Fib n ville være 1. Hvis n er 2, Fib n ville være 1. Hvis n er 3, Fib n ville være 2. Hvis n er 4, Fib n ville være 3 – og så videre. Leseren kan verifisere denne formelen matematisk, ved å erstatte forskjellige verdier for n og evaluere.

Når den er kodet, vil denne formelen produsere bare ett Fibonacci-tall for n. Hvis det kreves mer enn ett Fibonacci-nummer, må koden for formelen kalles én gang for hver av de forskjellige tilsvarende indeksene.

I Java er metoden for å produsere bare ett Fibonacci-tall:

import java.lang.* ;

klasse Fib {
dobbelt fibNo ( int n ) {
dobbelt FibN = ( Matte . pow ( ( 1 + Matte . sqrt ( 5 ) ) / to , n ) Matte . pow ( ( 1 - Matte . sqrt ( 5 ) ) / to , n ) ) / Matte . sqrt ( 5 ) ;
komme tilbake FibN ;
}
}

Java.lang.*-pakken måtte importeres i begynnelsen av programmet. Dette er fordi pakken har Math-klassen, som har metodene power (pow) og kvadratrot (sqrt). Den tilpassede Java-metoden her implementerer matematisk formel direkte.

Tidskompleksiteten for denne funksjonen er O(1), konstant tam for én hovedoperasjon. En passende Java-hovedklasse, med Java-hovedmetode for metoden ovenfor, er:

offentlig klasse Hoved {
offentlig statisk tomrom hoved- ( String args [ ] ) {
int N = elleve ;
Fib obj = ny Fib ( ) ;
dobbelt Ikke sant = obj. fibNo ( N ) ;
System . ute . println ( Ikke sant ) ;
}
}

Indeksen n = 11 sendes og Fibonacci-tallet 89 returneres. Utgangen er:

89.00000000000003

De unødvendige desimalsifrene kan fjernes, men det er en diskusjon for en annen gang.

Konklusjon

Fibonacci-tall er en bestemt sekvens av hele tall. For å få det gjeldende nummeret, legg til de to umiddelbart foregående tilsvarende tallene. De to første Fibonacci-tallene, 0 etterfulgt av 1, er forhåndserklært for hele sekvensen. Resten av Fibonacci-numrene er produsert derfra.

For å produsere Fibonacci-tall fra indeks 2, til det som tilsvarer indeks n-1, bruk en for-løkke med hovedsetningen:

int currNo = P [ Jeg - 1 ] + P [ Jeg - to ] ;

der currNo er gjeldende Fibonacci-nummer og P er matrisen for å lagre de n tallene.

For å produsere bare ett Fibonacci-tall fra en hvilken som helst null-basert indeks n, bruk den matematiske formelen: