Ich versuche, die folgende Hausaufgabe zu entziffern. Mein Code soll 190 bewerten, wird aber stattdessen mit 114 bewertet. Ich glaube also nicht, dass ich die Codierungsanforderungen verstehe.Verstehen der Collatz-Vermutung Ziel in Python
Die Collatz-Vermutung ist ein Beispiel eines einfachen Rechenprozessverhaltens das ist so unberechenbar, dass die besten Mathematiker immer noch der Welt, die es nicht verstehen.
Betrachten wir die einfache Funktion
f(n)
(wie in der Seite Wikipedia definiert oben), die eine ganze Zahln
und teilt es durch zwei wennn
geradzahlig und Multiplikationenn
von 3 und dann fügt man zu dem Ergebnis kommt, wennn
ungerade . Die Vermutung beinhaltet Untersuchung der Wert von Ausdrücken des Formularsf(f(f(...f(f(n)))))
als die Anzahl der Aufrufe an die Funktionf
erhöht. Die Vermutung ist, dass für jede nicht-negative ganze Zahln
, wiederholte Anwendung vonf
-n
eine Folge von ganzen Zahlen ergibt, die immer 1.Ihre Aufgabe für diese Frage enthält, ist die Collatz-Funktion
f
in Python zu implementieren . Der Schlüssel zu Ihrer Implementierung besteht darin, einen Test zu erstellen, der bestimmt, obn
gerade oder ungerade ist, indem Sie überprüfen, ob der Rest , wennn
durch 2 geteilt wird, entweder Null oder Eins ist. Hinweis: Sie können diesen Rest in Python mit dem Restoperator%
über den Ausdruckn % 2
berechnen. Beachten Sie, dass Sie bei der Berechnungf
auch die Ganzzahl division//
verwenden müssen. Wenn Sief
implementiert haben, testen Sie die Implementierung auf dem Ausdruckf(f(f(f(f(f(f(674)))))))
. Dieser Ausdruck sollte bis190
auswerten.
from __future__ import division
def collatz(n):
l = []
l.append(n)
while n != 1:
if n % 2 == 0:
n = n // 2
l.append(n)
else:
n = (3*n) + 1
l.append(n)
return l
print len(collatz(674))
Sie haben nicht umgesetzt 'f' aber eine ganz andere (wenn auch verwandte) Funktion. 'f' sollte nur den nächsten Term in der Sequenz berechnen, nicht die gesamte Sequenz. –