4.4 Ein Schritt weiter: while-Schleifen und -Rekursion
Primitive Rekursion erlaubt uns Schleifen, allerdings nur in einer sehr restriktiven Form:
- Wir müssen anfangs bereits angeben, wie oft wir die Schleife durchlaufen wollen;
- wir dürfen nur eine lokale Variable mitführen (und den Iterationsindex).
Die Collatz-Vermutung
Wir definieren eine Funktion
Für eine natürliche Zahl
Wir beenden die Sequenz daher üblicherweise, wenn wir bei 1 (und somit in dieser Dreierschleife) gelandet sind. Es kann allerdings etwas länger dauern:
Experimentieren Sie! Ich habe dafür die Html-Seite collatz.html erstellt.
Es scheint: egal, wo Sie anfangen, Sie enden immer bei 1. Allerdings wissen wir nicht
im Voraus, wie oft wir die Funktion
While-Schleifen
Eine Einschränkung primitiv-rekursiver Funktionen ist also, dass wir immer vor der Schleife
angeben müssen, wie oft diese durchlaufen werden soll. Es gibt also keine
while
-Schleifen. Führen wir diese nun ein.
def While (condition, step):
def f(x):
temp = x
while (condition(temp)):
temp = step(temp)
return temp
return f
Übungsaufgabe 4.4.1
Schreiben Sie mit Hilfe von While
, PrimRec
und Comp
eine Funktion collatzList
, die aus einer Zahl
die Collatz-Folge baut, also
collatzList(7)
[]