recursie: de torens van hanoi lesgever: tineke broekaert
TRANSCRIPT
Recursie:De torens van Hanoi
Lesgever: Tineke Broekaert
Herhaling
• Recursie? algoritme roept zichzelf op opgeroepen probleem kleiner dan origineel 2 delen: basisgeval en recursief gedeelte oplossing: Eerst basisgeval behandelen! voorbeeld: n! = n(n-1)!
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
Voorwaarden: 1 schijf verplaatsen per beurt geen grote staaf op kleinere plaatsen
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
BASISGEVAL: 1 schijf verplaatst
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
toren van 2 schijven verplaatst
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
Toren van drie schijven verplaatst
De torens van Hanoi
hulp bron doel
1 2 3
De torens van Hanoi
hulp bron doel
1 2 3
Toren van 4 schijven verplaatst
De torens van Hanoi
• Probleem opsplitsen in deelproblemen
• Algoritme:Als N = 1 enige schijf verplaatst
Als N > 1
- Verplaats bovenste n-1 schijven van bron- naar hulpstaaf - Verplaats onderste schijf van begin- naar doelstaaf - Verplaats n-1 schijven van hulp- naar doelstaaf
recursie!!
recursie!!
basisgeval!!
Implementatie in Logo
• Deelproblemen? beginsituatie: staven en schijven op het scherm tekenen verplaatsen van schijven:
• schijf afhalen van staaf • schijf toevoegen aan staaf
beginsituatie
HANOI
verplaatsSchijven
basisgeval
Recursieve oproep
Implementatie in Logo
1. Beginsituatie to staaf : staaf : aantalSchijven
setpc [255 0 0] setfc [255 0 0]positie 300*(:staaf-2) 0repeat 2 [fd 20+:aantalschijven*20 rt 90 fd 30 rt 90]rt 10 fd 5 fill lt 10
test : staaf 1 5 staaf 2 5 staaf 3 5
WAAROM
Implementatie in Logo voegToeSchijf : staaf :schijf
setpc [0 0 255] setfc [0 0 255]positie 300*(:staaf-2)-(10*:schijf) (item :staaf :staven)*20repeat 2 [fd 15 rt 90 fd 30+20*:schijf rt 90]rt 10 fd 5fillpositie 300*(:staaf-2)+5 (item :staaf :staven)*20+5fillpositie 300*(:staaf-2)+35 (item :staaf :staven)*20+5filllt 10setItem :staaf :staven (item :staaf :staven)+1
WAAROM
Implementatie in Logo
• Array: 1 variabele, bevat verschillende items
index
make “arrayNaam {3 4 2}
(item 1 arrayNaam )
setItem 2 arrayNaam 10
3
{3 10 2}
Implementatie in Logo
test: make “staven{0 0 0}staaf 1 5staaf 2 5staaf 3 5
voegToeSchijf 2 5 voegToeSchijf 2 4 voegToeSchijf 2 3 voegToeSchijf 2 2 voegToeSchijf 2 1
KORTER?
make “aantalSchijven 5repeat :aantalschijven [voegtoeSchijf 2 :aantalschijven make "aantalschijven :aantalschijven-1]
Implementatie in Logo
cs htmake "staven {0 0 0}staaf 1 :aantalschijvenstaaf 2 :aantalschijvenstaaf 3 :aantalschijvenrepeat :aantalschijven [voegtoeSchijf 2 :aantalschijven make "aantalschijven :aantalschijven-1]
to beginSituatie :aantalschijven
beginsituatie
HANOI
verplaatsSchijven
Implementatie in Logo
2. Verplaatsen van schijven
to verplaatsSchijf :bronstaaf :doelstaaf :schijf
verwijderSchijf : bronstaafvoegToeSchijf :doelstaaf :schijf
Basisgeval: verplaats 1 schijf
Procedure verwijderSchijf
Implementatie in Logo
setItem :staaf :staven (item :staaf :staven)-1
; schijf wissensetfc [255 255 255] positie 300*(:staaf-2) (item :staaf :staven)*20+5fill
; paal terugkleurenpositie 300*(:staaf-2) (item :staaf :staven)*20setpc [255 0 0] setfc [255 0 0]repeat 2 [fd 15 rt 90 fd 30 rt 90]rt 10 fd 5 filllt 10
to verwijderSchijf :staaf test: verwijderSchijf 2
Implementatie in Logo
To verplaatsSchijven :aantalschijven :bronstaaf :doelstaaf :hulpstaaf
ifelse :aantalschijven = 1 [ verplaatsSchijf :bron :doel :aantalschijven ] [ verplaatsSchijven :aantalschijven-1 :bron :hulp :doel verplaatsSchijf :bron :doel :aantalschijven verplaatsSchijven :aantalschijven-1 :hulp :doel :bron]
procedure verplaatsSchijven
Implementatie in Logo
beginSituatie :aantalSchijvenverplaatsSchijven :aantalSchijven 2 3 1
to hanoi :aantalschijven
3. Oplossing