Einfacher Einstieg ins Programmieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Sucht die Fehler

    Alle? ^^

    Auf den ersten Blick (ungetestet):

    - sys wird importiert, aber nicht verwendet

    - die Funktion fibonacci() wird garnicht aufgerufen

    - das Skript kann bei großen Zahlen (bezüglich Rekursionstiefe) abschmieren und sollte wenigstens davor geschützt werden.

    - Floats (oder überhaupt ein Typ) werden nicht berücksichtigt

    Da habe ich bestimmt noch einiges übersehen?!

  • 1) Das Programm ist unvollstaendig. Nach der if Zeile 9 kommen sicherlich im Original noch diverse Codezeilen. Die haben nur die ersten 9 Zeilen angegeben. Das ist noch soweit verstaendlich.

    Aber

    2) Die eigentliche Fibonaccirekusion ist falsch :shy:

    ist ein echter Faux Pas :-/

    Ich habe mal den Code ergaenzt und korrigiert.

  • framp Da bekomme ich beim ``print`` einen Syntaxfehler. Da fehlen die Klammern. Oder der Fehler ist es immer noch Python 2.x zu verwenden.

    Die `fibonacci()`-Funktion könnte man auch etwas kürzer mit nur einem ``return`` schreiben:

    Ansonsten ist es natürlich ineffizient a) da Rekursion zu verwenden, und b) für jedes `i` immer alle vorhergehenden Zahlen zu berechnen.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • __blackjack__

    Das der Code ineffizient ist sieht jeder schnell. Aber um das Prinzip einer etwas komplizierteren Rekursion zu demonstrieren eignet sich der Code sehr gut. Nicht umsonst findet man diesen in Programmiertutorials bzw für die Oldies in Programmiereinsteigerlehrbuechern.

  • Ein jeder rekursive Code kann auch iterativ geschrieben werden. Allerdings ist er dann meist nicht mehr so einfach zu verstehen :(

    Allerdings ist die iterative Loesung bei Fibonacci noch sehr gut zu verstehen. Wo siehst Du da Moertel und Kelle?

  • Ich muss zu meiner Schande gestehen dass ich zwar PEP kenne aber nie gelesen habe ...

    Mir ist auch gerade aufgefallen dass der Code sowieso eine irrwitzige Rekursion ist die fuer jeden Input 1 liefert ausser bei 0.

    Code
    n+f(n-1)

    oder

    Code
    n*f(n-1)

    liefern noch die Summe aller Zahlen von 1..n bzw das Produkt von 1..n und machen noch einen gewissen wenn auch eher akademischen Sinn. Aber einfach f(n-1) ist Bullshit.

    Kurzum: Die c't sollte mal die Kommunikation zwischen ihren Abteilungen verbessern damit sowas nicht mehr passiert.

  • Mir ist auch gerade aufgefallen dass der Code sowieso eine irrwitzige Rekursion ist die fuer jeden Input 1 liefert ausser bei 0.

    In dem von der Startseite, jain. Jain, weil man dort auch floats verwenden könnte und damit irgendwas mit 0.099* geliefert würde.

    Bei dem anderen, wenn man dann eine größere Zahl (z.B ab 100) verwendet, braucht man vieeeeeeel Zeit und Rechenleistung, bis das Ergebnis mal erscheint.

  • Iterativ ist schneller und hat einen vielfach geringeren Memory-Footprint.

    Rekursive Algorithmen in iterative umzuformen, ist in manchen Fällen sehr fordernd.

    Code
    Rekursion: fibonacci_recursive(10) | 6.19 s
    Iterativ: fibonacci_iterative(100) (das 10-fache) | 2.22 s

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!