#include
#include
#include
#include
#include
using namespace std;
// Headers
string toString (double);
int toInt (string);
double toDouble (string);
void fibonacci(int prevNumber, int number, int size, int i);
int main() {
//
// Fibonacci Zahlen sind so definiert:
// F_{0} = 0, F_{1} = 1 und F_{n} = F_{n-1} + F_{n-2} für n > 1
//
// Ausgehend von einem Start bei 0 und 1 lauten die ersten zwölf Werte der Folge 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89.
// Die Variablen prevnumber und number werden für die zwei Startwerte F_{0} und F_{1} deklariert. Zu Beginn werden sie mit den Werten 0 beziehungsweise 1 initialisiert.
int prevnumber;
prevnumber = 0;
int number;
number = 1;
// Die Variable size bezeichnet die n-te Fibonacci Zahl, bis zu der die Ausgabe der Fibonacci Zahlen erfolgen soll.
int size;
cout << "Bitte geben Sie eine Zahl zwischen 2 und 93 ein" << endl;
cin >> size;
// Damit die Fibonacci Zahlen nicht zu groß werden, ist hier eine Begrenzung bei 93 eingefügt worden. In der while Schleife wird geprüft, ob die Zahl kleiner gleich 93 ist und ob sie größer als 0 ist. Da nur positive ganze Zahlen als Eingabe möglich sind.
while (size > 93 || size < 0) {
cout << "Bitte geben Sie eine Zahl zwischen 2 und 93 ein" << endl;
cin >> size;
}
// Die Fibonacci Zahlen werden rekursiv mithilfe der Funktion Fibonacci berechnet.
cout << prevnumber << endl;
cout << number << endl;
// Die Fibonacci Zahlen werden rekursiv mithilfe der Funktion Fibonacci berechnet.
fibonacci(prevnumber, number, size, 1);
return 0;
}
void fibonacci(int prevNumber, int number, int size, int i) {
// Die Variable nextnumber wird für nächste Fibonacci Zahl deklariert.
int nextnumber;
// Da die Zählung der Fibonacci Zahlen bei 0 beginnt, d.h. mit F_{0} = 0, wird in der Fallunterscheidung size -1 verwendet, um die Zahl an den Indexwert anzupassen. So hat die zwölft Fibonacci Zahl, die 89, den Indexwert elf, also F_{11} = 89.
if (i < size - 1) {
// Solange wie der Wert von der Variablen i kleiner als der Wert der Variablen size - 1 ist, wird einer neuer Wert für die Variable nextnumber berechnet. Dazu wird die Summe aus prevnumber und number gebildet.
nextnumber = prevNumber + number;
// Der Variablen prevnumber wird der Wert der Variablen number zugewiesen, und dieser wird der Wert von nextnumber zugewiesen.
prevNumber = number;
number = nextnumber;
// Der aktuelle Wert der Variablen nextnumber wird ausgegeben.
cout << nextnumber << endl;
// Die Variable i wird um 1 erhöht.
i = i + 1;
// Nun wird die Funktion Fibonacci mit den neuen Werten erneut aufgerufen.
fibonacci(prevNumber, number, size, i);
}
}
// Im Folgenden werden Funktionen zur Typumwandlung implementiert.
string toString (double value) { //int auch
stringstream temp;
temp << value;
return temp.str();
}
int toInt (string text) {
return atoi(text.c_str());
}
double toDouble (string text) {
return atof(text.c_str());
}