Fibonacci -Zahlen in der C -Sprache

Fibonacci -Zahlen in der C -Sprache

„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.