Dies ist der Hintergrund dieser Frage:
Hintergrund Nehmen Sie eine ganze Zahl n größer als 1 und wenden Sie den folgenden Algorithmus an
Wenn n ungerade ist, dann ist n = n x 3 + 1 else n = n / 2
Wenn n gleich 1 ist, dann stoppe, andernfalls gehe zu Schritt 1
Im Folgenden wird gezeigt, was passiert, wenn Sie einen Start n von 6 verwenden
6 - 3 - 10 - 5 - 16 - 8 - 4 - 2 - 1
Nach 8 Generationen des Algorithmus kommen wir auf 1. Es wird vermutet, dass für jede Zahl größer als 1 die wiederholte Anwendung dieses Algorithmus wird eventuell bis 1.
Die Frage ist, wie kann ich eine Zahl finden, die genau 500 Generationen benötigt, um auf 1 zu reduzieren?
Der folgende Code ist meine Version, hat aber offensichtlich eine falsche Logik. Könnten Sie mir helfen, das zu korrigieren? Vielen Dank im Voraus.
%Vor%Ihr Problem ist ein Teil der Collatz-Vermutung (über rekursiv definierte Funktion), die noch nicht gelöst wurde:
Ich denke also, rohe Gewalt ist ein guter Ausweg:
%Vor%Beobachten Sie das Problem,
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
In der dritten Iteration haben wir die Zahl 10 erreicht, die kleiner als 13
ist
Also, anstatt die Sequenzzahl jedes Mal zu berechnen, können wir einen Cache verwenden.
%Vor%Weitere Einzelheiten finden Sie unter project euler und das .