Python-Fibonacci Code?
Hallo,
Ich bin erst seit ganz kurzem in dem Thema Pythonprogrammierung wieder drin. Ich habe online eine Coding-Challenge gefunden, bei der man die ersten x Zahlen der Fibonacci-Folge ausgeben soll. Das habe ich dann auch nach kurzem überlegen geschafft und diesen Code hier geschrieben:
a = 0
b = 1
for x in range(10):
c = a + b
print(c)
a = b
b = c
Allerdings habe ich mir dann mal andere Lösungen im Internet angeschaut, wo die das rekursiv gelöst haben (weiß nicht mal was das ist), oder auf andere sehr komplizierte Wege. Deswegen bin ich halt ziemlich verwirrt. Ist meine Methode zur Lösung des Problems schlecht, oder grade gut, weil sie so simpel ist?
Ich würde mich sehr freuen, wenn mir irgendjemand erklären könnte, ob und wieso meine Lösung schlecht oder gut ist.
Viele Grüße
Code Snake
3 Antworten
Als Beispiel ist auf python.org sogar eine kleine script gleich als Beispiel da
Hi,
Eine Lösung die DU nicht verstehst ist die schlechteste. Denn du weisst nicht was dein Code tut, also kannst du ihn auch nicht maintainen.
Dein Code funktioniert, also ist es sicherlich eine Lösung. Wenn es jetzt um Laufzeit geht, dann ist dein Code genauso gut, wie wenn du das Problem rekrusiv löst.
Was heisst nun rekursiv? Rekursiv bedeutet, dass deine Funktion sich selbst wieder aufruft, dann wieder, wieder, etc. das kann bis ins unendliche gehen, oder irgendwann abbrechen und die jeweiligen Resultate als Return Wert zurück geben.
So als Beispiel mit Pseudo Code:
fibonacci(a, b)
c = a + b
fibonacci(b, c)
fibonacci (1, 1)
Der Code ist recht ähnlich zu deinem.
Du beginnst mit c = 1 + 1 = 2
und gibst dann 2, 1 wieder an die Funktion
Dann ist c = 2 + 1 = 3, das wiederrum in die Funktion übergeben ergibt (2, 3) etc.
Abgesehen davon, dass bei deiner Ausgabe die ersten beiden Zahlen der Sequenz (0, 1) fehlen, ist die Lösung gut, denn sie ist einfach und erfüllt ihren Zweck.
wo die das rekursiv gelöst haben (weiß nicht mal was das ist)
Bei einer rekursiven Lösung ruft eine Funktion sich selbst erneut auf, um eine Operation mehrmals durchzuführen.
Ein sehr einfaches Beispiel:
def print_numbers(current, max):
if max >= current:
print(current)
print_numbers(current + 1, max)
print_numbers(1, 10)
Hierbei werden die Zahlen 1 bis 10 (beide Grenzen inklusiv) ausgegeben.
Es gibt manche Fälle, wo es leichter ist, eine rekursive Lösung zu formulieren, als eine iterative. Das ist vor allem dann der Fall, wenn man ein Problem mittels einer Zerlegeoperation lösen möchte (konkretes Beispiel: Ausgabe aller Werte einer beliebig tiefen Baumstruktur).