Ein rekursives Problem in c #

8

Dies ist der Hintergrund dieser Frage:

Hintergrund Nehmen Sie eine ganze Zahl n größer als 1 und wenden Sie den folgenden Algorithmus an

  1. Wenn n ungerade ist, dann ist n = n x 3 + 1 else n = n / 2

  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%     
AustintheCleric 14.08.2013, 11:02
quelle

4 Antworten

9

Da der Titel Ihrer Frage "A Rekursion Problem" lautet, gebe ich Ihnen eine rekursive Lösung.

%Vor%

Nun finden Sie alle Zahlen in einem angegebenen Bereich, die 1 nach genau 500 Rekursionen zurückgeben:

%Vor%     
Nolonar 14.08.2013, 11:19
quelle
4

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%     
Dmitry Bychenko 14.08.2013 11:15
quelle
3

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 .

    
Naren 14.08.2013 11:39
quelle
1

Eine rekursive Lösung

%Vor%

zum Testen

%Vor%     
Ehsan 14.08.2013 11:23
quelle

Tags und Links