Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:rekursion:rekursionsschachteln:start [12.01.2022 20:13] – sbel | faecher:informatik:oberstufe:algorithmen:rekursion:rekursionsschachteln:start [28.01.2025 07:19] (aktuell) – [Fallunterscheidung ist unbedingt notwendig] Frank Schiebel | ||
---|---|---|---|
Zeile 24: | Zeile 24: | ||
</ | </ | ||
+ | //Ein Wort zu Eleganz und Performanz:// | ||
+ | |||
+ | < | ||
+ | Loops may achieve a performance gain for your program. Recursion may achieve a performance gain for your programmer. Choose which is more important in your situation! | ||
+ | </ | ||
+ | (Leigh Caldwell, http:// | ||
+ | |||
+ | ===== Fallunterscheidung ist unbedingt notwendig ===== | ||
+ | |||
+ | Die Funktion ruft sich aber nicht bedingungslos selbst auf, sondern nur dann, wenn eine Schachtel (und kein Schlüssel) gefunden wird. Wenn man diese Fallunterscheidung weglässt, erzeugt man eine " | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) Experiment: Countdown === | ||
+ | |||
+ | Implementiere eine Methode, die einen Countdown ausgibt: | ||
+ | |||
+ | < | ||
+ | 4 ..... 3 ..... 2 ..... 1 ..... 0 | ||
+ | </ | ||
+ | |||
+ | **(A)** Zunächst iterativ, z.B. mit einer for-Schleife, | ||
+ | |||
+ | **(B)** Dann rekursiv anhand des folgenden Pseudocodes: | ||
+ | |||
+ | < | ||
+ | countdown_rekursiv(int i): | ||
+ | print(i + " .... ") | ||
+ | countdown_rekursiv(i-1) | ||
+ | </ | ||
+ | |||
+ | * Teste den Code. Was beobachtest du? | ||
+ | * Skizziere eine Programmablaufdiagramm für die rekursive Methode. | ||
+ | * Erläutere, was das Problem ist. | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | Jede rekursive Funktion benötigt eine Fallunterscheidung in zwei Fälle: | ||
+ | * **Rekursionsfall**: | ||
+ | * **Basisfall**: | ||
+ | </ | ||
+ | |||
+ | **(C)** Passe deine rekursive Methode anhand des folgenden Pseudocodes mit einer Fallunterscheidung an: | ||
+ | |||
+ | < | ||
+ | countdown_rekursiv(int i): | ||
+ | wenn i<0: | ||
+ | return | ||
+ | sonst: | ||
+ | print(i + " .... ") | ||
+ | countdown_rekursiv(i-1) | ||
+ | </ | ||
+ | |||
+ | * Teste deinen Code | ||
+ | * Skizziere ein Programmablaufdiagramm für die rekursive Variante mit Fallunterscheidung. |