Bouwsteen 3 — de recursie
Hier bouw je op verder
- Python Lijst-methoden
Leerdoel: je zet de drie stappen om in code en maakt de functie volledig recursief.
De drie stappen
Pak het recept van Op zoek naar patronen er
nog eens bij. Om n schijven van bron naar doel te verplaatsen:
n − 1schijven naar de hulp-paal. Dat is hetzelfde probleem, metdoeleven als hulp:hanoi(n - 1, bron, hulp, doel).- De grootste schijf naar doel, één losse zet:
(bron, doel). n − 1schijven van hulp naar doel. Weer hetzelfde probleem, nu metbronals hulp:hanoi(n - 1, hulp, doel, bron).
Kijk goed hoe de palen in stap 1 en 3 van rol wisselen: in elke deelstap is
een andere paal de tijdelijke parkeerplek. Die drie stukken plak je aan
elkaar tot één lijst zetten. Daar heb je twee verschillende dingen voor
nodig: zetten += andere_lijst plakt alle zetten uit een lijst achter
zetten, en zetten.append(zet) hangt er één losse zet aan.
Bouw en test
Antwoord
def hanoi(n, bron, doel, hulp):
if n == 0:
return []
zetten = []
zetten += hanoi(n - 1, bron, hulp, doel) # n-1 naar de hulp-paal
zetten.append((bron, doel)) # grootste schijf naar doel
zetten += hanoi(n - 1, hulp, doel, bron) # n-1 op hun plek
return zetten
In stap 1 staat hulp op de plek van doel, want de schijven moeten nu
naar de hulp-paal, en doel doet dienst als tijdelijke hulp. In stap 3 is
het andersom. Verwissel je die twee, dan klopt de oplossing niet meer; zie
de fouten-pagina.
Door naar compleet →.