[PYTHON] Fordern Sie den Turm von Hanoi mit Wiederholung heraus

Guten Abend. Vielen Dank für Ihre weitere Unterstützung.

Ich habe verschiedene Meinungen von Experten gesehen, aber Es war ziemlich schwierig. Es ist wahrscheinlich eine Frage meines Verständnisses, also kann ich nichts dagegen tun.

Lass es uns zuerst tun. Versuchen Sie, die beiden Festplatten vom linken zum rechten Rand zu bewegen. Hier sind die Ausdrücke am rechten Ende, in der Mitte und am linken Ende subtil Ordnen Sie eine Nummer zu. Linke Kante: 1, Mitte: 2, rechte Kante: 3. 図1.PNG Ich schrieb es, Die Festplatte bewegte sich nach rechts und woher Es wurde verschoben oder ergänzt.

Ich habe den Boden im vorherigen Artikel rekursiv erfasst Kann es umgeleitet werden? Lass uns einen Blick darauf werfen.

cure.py


def test(n:int=3):
    if n>1:
        return n * test(n-1)
    else:
        return 1

Was ich tun möchte. ..

Ich möchte zwei Festplatten von 1 auf 3 verschieben
Verschieben Sie die Nummer 1 von 1 auf 2 und dann
Verschieben Sie die Nummer 2 von 1 auf 3 und
Verschieben Sie die Nummer 1 von 2 auf 3.

Machen Sie die Nummer und das Blatt gemeinsam als n, Gehen wir von x nach y. Auch hier ist das Bild.

2 Blatt(n)Scheibe von 1(x)Ab 3(y)Ich möchte umziehen
Nr. 1(n)Scheibe von 1(x)Ab 2(y)Nach dem Umzug nach
Nr. 2(n)Scheibe von 1(x)Ab 3(y)Ziehen nach
Nr. 1(n)Scheibe von 2(x)Ab 3(y)Ziehen nach.

Daher scheint es gut, mit dem Def-Test (n, x, y) zu beginnen.

2 Blatt(n)Scheibe von 1(x)Ab 3(y)Ich möchte umziehen=> def test(n , x , y): 
Nr. 1(n)Scheibe von 1(x)Ab 2(y)Nach dem Umzug nach
Nr. 2(n)Scheibe von 1(x)Ab 3(y)Ziehen nach
Nr. 1(n)Scheibe von 2(x)Ab 3(y)Ziehen nach.

Nächster. Nach dem Start von Test (2,1,3) als nächstes Muss für das Bestehen des Tests konfiguriert sein (1,1,2). test(1,1,?) Wie machst du das letzte? Denken Sie daran, dass jede Achse nummeriert wurde. Da 1 + 2 + 3 = 6 ist, kann 6-x-y verwendet werden, um & agr; auszudrücken.

2 Blatt(n)Scheibe von 1(x)Ab 3(y)Ich möchte umziehen=> def test(n , x , y): 
Nr. 1(n)Scheibe von 1(x)Ab 2(y)Nach dem Umzug nach=>     test(n-1,x ,6-x-y)
Nr. 2(n)Scheibe von 1(x)Ab 3(y)Ziehen nach
Nr. 1(n)Scheibe von 2(x)Ab 3(y)Ziehen nach.

Wenn das Obige unverändert bleibt, tritt der Zustand von n == 0 auf. 0 Scheibe? 0 Scheibe? Es scheint ein wenig kaputt zu sein, also Machen wir eine Bedingung mit der if-Anweisung. Wenn n> 1, dann Sie können die Bedingung von n == 0 vermeiden.

2 Blatt(n)Scheibe von 1(x)Ab 3(y)Ich möchte umziehen=> def test(n , x , y): 
Nr. 1(n)Scheibe von 1(x)Ab 2(y)Nach dem Umzug nach=>   if n>1:
                                  test(n-1,x ,6-x-y)

Nr. 2(n)Scheibe von 1(x)Ab 3(y)Ziehen nach
Nr. 1(n)Scheibe von 2(x)Ab 3(y)Ziehen nach.

Betrachtet man durch Ersetzen durch Test (1,1,2) die obige Konfiguration Ich bin nicht süchtig nach n> 1, also pass. In diesem Stadium ist es in Ordnung, wenn Sie "Drucken der 1. (n) Festplatte von 1 (x) auf 2 (y)" mit Druck anzeigen können.

2 Blatt(n)Scheibe von 1(x)Ab 3(y)Ich möchte umziehen=> def test(n , x , y): 
Nr. 1(n)Scheibe von 1(x)Ab 2(y)Nach dem Umzug nach=>   if n>1:
                                    test(n-1,x ,6-x-y)
                                  print(f"{n}Zu{x}=>{y}Was")
Nr. 2(n)Scheibe von 1(x)Ab 3(y)Ziehen nach
Nr. 1(n)Scheibe von 2(x)Ab 3(y)Ziehen nach.

Es ist ein wenig schwer zu erklären, test (1,1,2) ist gleich print (f "{1} bis {1} => {2}"). Drucken Sie nach dem Beenden (f "{2} bis {1} => {3}") beim Test (2,1,3). Sie werden automatisch verbunden. Was ist mit der letzten "Verschieben Sie die 1. (n) Platte von 2 (x) auf 3 (y)"? Ich habe es so versucht.

test.py


def test(n,x,y):
    if n>1:
        test(n-1,x,6-x-y)
    print(f"{n}Zu{x}=>{y}Was")
    if n>1:
        test(n-1,6-x-y,y)

Nun, ich denke darüber nach, es zu erklären (lacht).

Recommended Posts

Fordern Sie den Turm von Hanoi mit Wiederholung heraus
Fordern Sie den Turm von Hanoi mit Wiederholungen + Stapel heraus
[Für Anfänger] Rekursive Funktion (Der Turm in Hanoi ist leicht zu verstehen!)
[Einführung in cx_Oracle] Übersicht über cx_Oracle
Kombination von rekursiv und Generator
Zuweisung von Ressourcen zum Testen
Ich wollte die Klassifizierung von CIFAR-10 mit dem Chainer-Trainer in Frage stellen