ich habe eine Aufgabe bekommen, die ich lösen soll.
Leider habe ich noch kein richtiges Verständnis für python, sodass ich um eure Mithilfe bitte.
Anbei die Aufgabe:
ci+1 = ci /2, wenn ci gerade ist bzw.
ci+1 = 3 · ci − 1, wenn ci ungerade ist.
Somit ergibt sich zum Beispiel für den Startwert n = 19 die Folge
19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1, . . .
Es gilt, dass, sobald die Folge einmal den Wert 1 erreicht, anschließend lediglich der
Zyklus 4, 2, 1 wiederholt wird. Es wird vermutet, dass dies für jeden Startwert n passiert,
bewiesen ist dies jedoch bisher nicht. Andererseits ist kein Startwert n bekannt, für den
nicht nach einer endlichen Anzahl von Schritten der Wert 1 erreicht wird.
Schreiben Sie ein Programm collatz.py, welches für die jeden möglichen Startwert
n ∈ [1000] die Länge l(n) der Collatz-Folge zum entsprechenden Startwert ausgibt. Die
Länge von (ci)i∈N ist definiert als das kleinste i, für das ci = 1 und ∞ sonst. Es gilt
also, dass l(1) = 1, l(2) = 2, l(3) = 8 und so weiter. Ihr Programm sollte keine Eingabe
entgegennehmen und die jeweiligen Längen mit der Funktion print ausgeben.
Und so habe ich angefangen:
Code: Alles auswählen
def collatz(n):
while n > 1:
if n % 2:
n = 3 * n +1
else:
n /= 2
return n
Vielen Dank