Recursie De torens van Hanoi Lesgever Tineke Broekaert
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 Voorwaarden: § 1 schijf verplaatsen per beurt § geen grote staaf op kleinere plaatsen hulp bron 1 2 doel 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 BASISGEVAL: 1 schijf verplaatst hulp bron doel 1 2 3
De torens van Hanoi hulp bron doel 1 2 3
De torens van Hanoi toren van 2 schijven verplaatst 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 Toren van drie schijven verplaatst hulp bron doel 1 2 3
De torens van Hanoi hulp bron doel 1 2 3
De torens van Hanoi Toren van 4 schijven verplaatst hulp bron doel 1 2 3
De torens van Hanoi • Probleem opsplitsen in deelproblemen • Algoritme: §Als N = 1 enige schijf verplaatst §Als N > 1 basisgeval!! recursie!! - 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!!
Implementatie in Logo • Deelproblemen? § beginsituatie: staven en schijven op het scherm tekenen § verplaatsen van schijven: Ø basisgeval • schijf afhalen van staaf • schijf toevoegen aan staaf Ø Recursieve oproep HANOI beginsituatie verplaats. Schijven
Implementatie in Logo 1. Beginsituatie WAAROM Ø to staaf : aantal. Schijven setpc [255 0 0] setfc [255 0 0] positie 300*(: staaf-2) 0 repeat 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
Implementatie in Logo Ø voeg. Toe. Schijf : staaf : schijf WAAROM setpc [0 0 255] setfc [0 0 255] positie 300*(: staaf-2)-(10*: schijf) (item : staaf : staven)*20 repeat 2 [fd 15 rt 90 fd 30+20*: schijf rt 90] rt 10 fd 5 fill positie 300*(: staaf-2)+5 (item : staaf : staven)*20+5 fill positie 300*(: staaf-2)+35 (item : staaf : staven)*20+5 fill lt 10 set. Item : staaf : staven (item : staaf : staven)+1
Implementatie in Logo • Array: 1 variabele, bevat verschillende items index make “array. Naam {3 4 2} (item 1 array. Naam ) 3 set. Item 2 array. Naam 10 {3 10 2}
Implementatie in Logo Ø test: make “staven{0 0 0} staaf 1 5 staaf 2 5 staaf 3 5 voeg. Toe. Schijf 2 4 voeg. Toe. Schijf 2 3 voeg. Toe. Schijf 2 2 voeg. Toe. Schijf 2 1 KORTER? make “aantal. Schijven 5 repeat : aantalschijven [voegtoe. Schijf 2 : aantalschijven make "aantalschijven : aantalschijven-1]
Implementatie in Logo to begin. Situatie : aantalschijven cs ht make "staven {0 0 0} staaf 1 : aantalschijven staaf 2 : aantalschijven staaf 3 : aantalschijven repeat : aantalschijven [voegtoe. Schijf 2 : aantalschijven make "aantalschijven : aantalschijven-1] HANOI beginsituatie verplaats. Schijven
Implementatie in Logo 2. Verplaatsen van schijven Ø Basisgeval: verplaats 1 schijf to verplaats. Schijf : bronstaaf : doelstaaf : schijf verwijder. Schijf : bronstaaf voeg. Toe. Schijf : doelstaaf : schijf Ø Procedure verwijder. Schijf
Implementatie in Logo to verwijder. Schijf : staaf Ø test: verwijder. Schijf 2 set. Item : staaf : staven (item : staaf : staven)-1 ; schijf wissen setfc [255 255] positie 300*(: staaf-2) (item : staaf : staven)*20+5 fill ; paal terugkleuren positie 300*(: staaf-2) (item : staaf : staven)*20 setpc [255 0 0] setfc [255 0 0] repeat 2 [fd 15 rt 90 fd 30 rt 90] rt 10 fd 5 fill lt 10
Implementatie in Logo Ø procedure verplaats. Schijven To verplaats. Schijven : aantalschijven : bronstaaf : doelstaaf : hulpstaaf ifelse : aantalschijven = 1 [ verplaats. Schijf : bron : doel : aantalschijven ] [ verplaats. Schijven : aantalschijven-1 : bron : hulp : doel verplaats. Schijf : bron : doel : aantalschijven verplaats. Schijven : aantalschijven-1 : hulp : doel : bron]
Implementatie in Logo 3. Oplossing to hanoi : aantalschijven begin. Situatie : aantal. Schijven verplaats. Schijven : aantal. Schijven 2 3 1
- Slides: 29