„Sei n 0. Die Fibonacci -Nummer für 0 lautet:
0
Sei n 1. Die Fibonacci -Nummer für 1 lautet:
1
Sei n 2. Die Fibonacci -Nummer für 2 lautet:
1 + 0 = 1
Sei n 3 sein. Die Fibonacci -Nummer für 3 lautet:
1 + 1 = 2
Sei n 4 sein. Die Fibonacci -Nummer für 4 lautet:
2 + 1 = 3
Sei n 5. Die Fibonacci -Nummer für 5 lautet:
3 + 2 = 5
Sei n 6 sein. Die Fibonacci -Nummer für 6 lautet:
5 + 3 = 8
Sei n 7 sein. Die Fibonacci -Nummer für 7 lautet:
8 + 5 = 13
Sei n 8 sein. Die Fibonacci -Nummer für 8 lautet:
13 + 8 = 21
Sei n 9 sein. Die Fibonacci -Nummer für 9 lautet:
21 + 13 = 34
Die folgende Tabelle zeigt die ersten zwölf Fibonacci -Zahlen:
0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Die erste Reihe gibt den Fibonacci -Zahlen an. Die zweite Zeile gibt die Null-basierten Indizes für das entsprechende Array an. Diese Indizes sind die unterschiedlichen N -Zahlen, beginnend von Null. Aus der Tabelle ist ersichtlich, dass die zehnte Fibonacci -Zahl 34 + 21 = 55 beträgt. Auch die elfte Fibonacci -Zahl ist 55 + 34 = 89 .
Ziel dieses Artikels ist es, eine Fibonacci -Zahl in o (n) Zeit und in konstanter Zeit O (1) unter Verwendung der Computersprache C zu erstellen.
Fibonacci -Zahlen sind Ganzzahlen, beginnend von 0.”
Die Formel für eine Fibonacci -Nummer
Wie aus der obigen Tabelle ersichtlich ist, ist die aktuelle Fibonacci -Zahl die Summe der beiden vorherigen Zahlen. Die Fibonacci -Nummer für 0 beträgt 0 und die Fibonacci -Nummer für 1 ist 1. Diese ersten beiden Zahlen müssen in ihrer Bestellung als solche akzeptiert werden. Entwickeln Sie die folgenden Fibonacci -Zahlen, beginnen Sie von dort, um 1 + 0 = 1 zu geben; 1 + 1 = 2; 2 + 1 = 3 usw.
Die Formel für eine bestimmte Fibonacci -Zahl kann in drei Zeilen oder einer Zeile angegeben werden. Die Formel in drei Zeilen ist wie folgt angegeben:
Diese Formel ist die Definition einer Fibonacci -Nummer.
Erzeugung von Fibonacci -Zahlen in o (n) Zeit
Mehr als eine Fibonacci -Zahl kann ab Null für einen bestimmten Wert von n erstellt werden. In diesem Fall ist N der höchste Index plus 1 für das Array - nimmt eine null basierte Indexierung an. Die Fibonacci -Zahl für i = 0 wird erzeugt (i.e 0). Die Fibonacci -Zahl für i = 1 wird dann erzeugt (i.e., 1). Die Fibonacci -Zahl für i = 2 wird dann als nächstes erzeugt (i.e., 1 wieder). Die Fibonacci -Zahl für i = 3 wird dann erzeugt (i.e., 2). Die Fibonacci -Zahl für i = 4 wird dann erzeugt (i.e., 3). Dies wird fortgesetzt, bis die Fibonacci -Nummer für die angegebene Zahl (Index) von N, beispielsweise 12, für den höchsten Index von 11 erstellt wird (89).
Ein C -Programm, das Eingaben von der Tastatur nimmt und es in das Terminal (Bildschirm) ausgibt, beginnt mit:
#enthalten
Mit dieser Vorverarbeitungsrichtlinie wird auf dem Bildschirm auf der Tastatur eingegebene Text angezeigt. Die Programmausgabe wird auch auf dem Bildschirm angezeigt. Die Fibonacci -Funktion lautet:
void fibonacci (int a [], int n)
if (n> 0)
A [0] = 0;
if (n> 1)
A [1] = 1;
für (int i = 2; iint nextno = a [i - 1] + a [i - 2];
A [i] = nextno;
Die ersten beiden Aussagen in der Funktion werden als zwei Operationen angesehen. Der Körper des For-Schleife kann als eine Operation betrachtet werden. Wenn n 12 ist, funktioniert der Körper der For-Schleife 10 Mal, da der erste und zweite Operationen für Index 0 und Index 1 bereits stattgefunden hat. Dies gibt eine Zeitkomplexität von O (12), die als O (n) geschrieben wurde.
Beachten Sie die Anweisung:
int nextno = a [i - 1] + a [i - 2];
Im Körper des For-Schleife. Es fügt die beiden vorherigen Fibonacci -Nummern hinzu, um die aktuelle Fibonacci -Nummer (NextNo) zu erhalten.
Eine geeignete C -Hauptfunktion für das obige Programm ist:
int main (int argc, char ** argv)
int n = 12;
int arr [12];
Fibonacci (arr, n);
für (int i = 0; iprintf ("%i", arr [i]);
printf ("\ n");
Rückkehr 0;
Erstellen einer Fibonacci -Zahl in konstanter Zeit
Oben beträgt der Index für die Fibonacci-Nummer 89 und nicht 12 für die nullbasierte Indexierung. Sei 11 sein n. In diesem Fall beträgt die aktuelle Fibonacci -Nummer 89. Wenn n 10 ist, wäre die aktuelle Fibonacci -Nummer 55. Wenn n 9 ist, wäre die aktuelle Fibonacci -Nummer 34. Dies dauert nach unten, bis n 0 ist, die Fibonacci -Nummer wäre 0.
Es gibt eine mathematische Formel, um die aktuelle (eine) Fibonacci-Nummer mit dem Null-basierten Index (Nummer) mit dem Variablennamen n zu erhalten. Die Formel lautet:
Beachten Sie, dass auf der rechten Seite der Gleichung nicht die Quadratwurzel von 5 ist, die auf die Power N angehoben wird; Es ist der Ausdruck in Klammern, der an die Macht n angehoben wird. Es gibt zwei solche Ausdrücke.
Also, wenn n 0 ist, fibN wird 0 sein. Wenn N 1 ist, fibN wird 1 sein. Wenn N 2 ist, fibN wird 1 sein. Wenn N 3 ist, fibN wird 2 sein - und so weiter.
Diese mathematische Funktion ist eine Hauptoperation, und sie gibt nur eine Fibonacci -Nummer zurück und nicht eine Folge von Zahlen, die beispielsweise Index 0 bis Index 11 entsprechen. Dies ist ein konstanter Zeitcode. Es kann weiterhin verwendet werden, um eine Folge von Fibonacci -Zahlen zu erzeugen, indem sie sie in einem Programm immer wieder mit verschiedenen Werten von n als Indizes aufruft.
Die zeitliche Komplexität dieser mathematischen Funktion, um ihre einzige Fibonacci -Zahl zu erzeugen, ist o (1), konstante Zeit.
Jetzt ist diese mathematische Funktion nachstehend codiert, um 12 Fibonacci -Nummern zu erzeugen. Es würde weniger Gesamtzeit als der vorherige Algorithmus verbrauchen.
Der Code für diese mathematische Funktion zur Erzeugung einer Fibonacci -Nummer lautet:
#enthalten
#enthalten
Doppelfibno (int n)
Doppelfibn = (POW ((1+sqrt (5))/2, n) - POW ((1 -sqrt (5))/2, n))/sqrt (5);
Fibn zurückgeben;
Beachten Sie, dass die Mathematik.Die H -Bibliothek ist diesmal enthalten, was die vordefinierten Funktionen der Leistung (POW) und der Square Root (SQRT) in das Programm einbringt. Die Funktion erzeugt nur eine Fibonacci -Zahl und keine Folge von ihnen. Eine geeignete Hauptfunktion für diesen Code ist:
int main (int argc, char ** argv)
int n = 11;
Doppelfibn = fibno (n);
printf ("%lf \ n", fibn);
Rückkehr 0;
Mit einem Index von 11 beträgt die Ausgabe 89.000000. Um dieses Programm jedoch mit dem GCC -Compiler auszuführen, verwenden Sie jedoch eine Befehlszeile wie:
GCC Temp.c -o temp -lm
wo „Temperatur.C ”ist der Quellcode und„ Temp “ist das kompilierte Programm. Beachten Sie die Verwendung des Schalters "-lm", wobei "L" Kleinbuchstaben l ist.
Abschluss
Die erste Fibonacci -Nummer ist 0. Die zweite Fibonacci -Nummer ist 1. Der Rest wird durch Hinzufügen der beiden vorherigen Fibonacci -Zahlen erhalten. Fibonacci -Zahlen sind Zahlenzahlen. Verwenden Sie eine Funktion mit einer Anweisung wie:
int nextno = a [i - 1] + a [i - 2];
wobei NextNO die aktuelle Nummer für den Index I ist, und „A“ ist das Array, um die Fibonacci -Sequenznummern zu halten. Die ersten beiden Zahlen, 0 und 1, werden unabhängig voneinander hergestellt.
Verwenden Sie die Mathematikformel, um nur eine Fibonacci -Nummer in o (1) Zeit zu erhalten:
wobei n der nullbasierte Index ist.
Fibonacci -Zahlen können unter Verwendung von Mathematikmatrizen erhalten werden. Dies ist jedoch eine Diskussion für einige andere Zeit.