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
- Regel 2-3:
Het basisgeval: nul schijven verplaatsen kost nul zetten. Zonder deze afslag blijft de recursie eeuwig doorgaan.
- Regel 5:
Stap 1 verplaatst
n - 1schijven van bron naar de hulppaal. Let op de rolwisseling:doelis in deze deelstap even de parkeerplek. - Regel 6:
Stap 2 is de grootste schijf, één losse zet als tuple
(bron, doel). - Regel 7:
Stap 3 verplaatst dezelfde
n - 1schijven van de hulppaal naar het doel; nu isbronde 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.
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 →.