Ga naar hoofdinhoud

De complete oplossing

Hier bouw je op verder: F-strings en enumerate (lineair zoeken, bouwsteen 1)

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Leerdoel: je ziet de volledige functie werken, bekijkt de zetten, en speelt met het aantal schijven.

De functie​

Alles wat je hebt opgebouwd bij elkaar: zeven regels die elke toren verplaatsen.

def hanoi(n, bron, doel, hulp):
if n == 0:
return []
zetten = []
zetten += hanoi(n - 1, bron, hulp, doel)
zetten.append((bron, doel))
zetten += hanoi(n - 1, hulp, doel, bron)
return zetten
  1. Regel 2-3:

    Het basisgeval: nul schijven verplaatsen kost nul zetten. Zonder deze afslag blijft de recursie eeuwig doorgaan.

  2. Regel 5:

    Stap 1 verplaatst n - 1 schijven van bron naar de hulppaal. Let op de rolwisseling: doel is in deze deelstap even de parkeerplek.

  3. Regel 6:

    Stap 2 is de grootste schijf, één losse zet als tuple (bron, doel).

  4. Regel 7:

    Stap 3 verplaatst dezelfde n - 1 schijven van de hulppaal naar het doel; nu is bron de parkeerplek.

Probeer het zelf​

Verander AANTAL en draai opnieuw. Let op het aantal zetten: elke schijf erbij verdubbelt het werk, 2ⁿ − 1. Blijf onder de 10 schijven, want bij 20 zijn het ruim een miljoen regels uitvoer en daar bevriest de tab op.

Python
Code-omgeving wordt voorbereid…

enumerate(zetten, start=1) geeft elke zet een nummer, vanaf 1 in plaats van 0, en (bron, doel) pakt de tuple van die zet meteen uit.

Door naar aanpassen →.