| |
| modul:m323:learningunits:lu01:loesungen:tracetable3 [2026/08/18 10:11] – Neue Loesung LU01.L12 - Trace Table Collatz admin | modul:m323:learningunits:lu01:loesungen:tracetable3 [2026/08/18 10:18] (aktuell) – Typografie korrigiert admin |
|---|
| ==== 1. Welche Spalten werden überflüssig? ==== | ==== 1. Welche Spalten werden überflüssig? ==== |
| |
| Die Spalten **„n (vorher)"** und **„n (nachher)"** fallen zusammen zu einer einzigen Spalte ''n''. Grund: In der rekursiven Fassung wird ''n'' nie überschrieben. Jeder Aufruf bekommt seinen eigenen ''n''-Wert und behält ihn bis zum Ende. | Die beiden Spalten //n (vorher)// und //n (nachher)// fallen zusammen zu einer einzigen Spalte ''n''. Grund: In der rekursiven Fassung wird ''n'' nie überschrieben. Jeder Aufruf bekommt seinen eigenen ''n''-Wert und behält ihn bis zum Ende. |
| |
| Ebenso verschwindet die Notwendigkeit, ''schritte'' als laufend veränderten Zähler mitzuführen – der Wert wird als Parameter weitergereicht. | Ebenso verschwindet die Notwendigkeit, ''schritte'' als laufend veränderten Zähler mitzuführen – der Wert wird als Parameter weitergereicht. |
| |
| **Der Kern:** Veränderlicher Zustand zwingt dazu, in der Tabelle einen //Zeitverlauf// zu dokumentieren („welchen Wert hatte ''n'' wann?"). Bei Parameterübergabe genügt eine //Momentaufnahme// pro Aufruf. Genau das meint die funktionale Programmierung, wenn sie sagt, Unveränderlichkeit mache Code leichter nachvollziehbar. | **Der Kern:** Veränderlicher Zustand zwingt dazu, in der Tabelle einen //Zeitverlauf// zu dokumentieren: Welchen Wert hatte ''n'' wann? Bei Parameterübergabe genügt eine //Momentaufnahme// pro Aufruf. Genau das meint die funktionale Programmierung, wenn sie sagt, Unveränderlichkeit mache Code leichter nachvollziehbar. |
| |
| ==== 2. Warum die zweite Variante leichter nachzuvollziehen ist ==== | ==== 2. Warum die zweite Variante leichter nachzuvollziehen ist ==== |
| ==== 3. Was passiert bei collatz(0)? ==== | ==== 3. Was passiert bei collatz(0)? ==== |
| |
| ''0 != 1'' ist wahr, also läuft die Schleife. ''0 % 2 == 0'' ist wahr, also wird ''n = 0 // 2 = 0''. Der Wert ändert sich nie – die Schleifenbedingung wird nie falsch. | ''n != 1'' ist wahr, also läuft die Schleife. ''n % 2 == 0'' ist wahr, also wird ''n = 0 // 2 = 0''. Der Wert ändert sich nie – die Schleifenbedingung wird nie falsch. |
| |
| ^ Fassung ^ Verhalten ^ | ^ Fassung ^ Verhalten ^ |
| Der Grund für die vielen Schritte: Ungerade Zahlen werden auf ''3n + 1'' vergrössert – die Folge steigt zunächst auf 52 an, bevor sie fällt. Bei 7 folgen mehrere ungerade Zahlen kurz hintereinander (7, 11, 17, 13, 5), sodass die Folge immer wieder nach oben springt. | Der Grund für die vielen Schritte: Ungerade Zahlen werden auf ''3n + 1'' vergrössert – die Folge steigt zunächst auf 52 an, bevor sie fällt. Bei 7 folgen mehrere ungerade Zahlen kurz hintereinander (7, 11, 17, 13, 5), sodass die Folge immer wieder nach oben springt. |
| |
| Die Anzahl Schritte lässt sich der Startzahl nicht ansehen – ''6'' braucht 8 Schritte, ''7'' deren 16, ''8'' nur 3. Genau das macht die Collatz-Folge zu einem guten Beispiel dafür, warum man Algorithmen ausführen oder tracen muss, statt sie zu erraten. | Die Anzahl Schritte lässt sich der Startzahl nicht ansehen: ''6'' braucht 8 Schritte, ''7'' deren 16, ''8'' nur 3. Genau das macht die Collatz-Folge zu einem guten Beispiel dafür, warum man Algorithmen ausführen oder tracen muss, statt sie zu erraten. |
| |
| ---- | ---- |
| [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi | [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi |
| |