WIELOSPI - labirynty rekurencji


Otwórzmy nowy projekt o nazwie SPIRALE.

Zaczniemy od budowania procedury WIELOSPI z parametrami bok, kąt i bokKonc. Procedura powinna zaczynać rysowanie od małego boku np. 5 kroków żółwia, a następny, rysowany po skręcie bok ma być o 5 kroków większy od poprzedniego i tak dalej, aż do narysowania najdłuższego boku, który podajemy jako bokKonc. Mamy tu trzy elementy charakterystyczne dla budowy procedury rekurencyjnej:
- warunek zakończenia: „aż do narysowania najdłuższego boku",
- kroki do wykonania: narysowanie boku i skręt o podany kąt,
- powtarzanie rekurencyjne: „i tak dalej".

Skąd jednak procedura będzie wiedziała, że ma narysować kolejny bok dłuższy od poprzedniego. To proste – procedura rysuje bok, którego wartość podajemy przy jej wywołaniu, jeśli przy każdym kolejnym wywołaniu bok ma być większy o 5 od poprzedniego, to należy zwiększać bok przy wywołaniu rekurencyjnym.

Zapiszmy plan procedury WIELOSPI z parametrami bok, kąt, bokKonc:
sprawdzenie warunku: czy bok jest większy niż bokKonc
jeśli tak, to zakończenie działania procedury,
jeśli nie, to:
przejście naprzód o długość boku
skręt w prawo o kąt
wywołanie procedury WIELOSPI z parametrami bok+5, kąt, bokKonc.

Trzeba jeszcze zbudować główną procedurę. Ma ona za zadanie wczytać dane dla procedury, a następnie wywołać ją.

Plan głównej procedury jest następujący:
wczytanie kąta skrętu (kąt)
wczytanie długości ostatniego boku (bokKonc)
wywołanie procedury WIELOSPI z parametrami 5, kąt, bokKonc


oto wielo :kąt :bokKonc
 wielospi 5 :kąt :bokKonc
już

oto wielospi :bok :kąt :bokKonc
 jeśli :bok > :bokKonc [stop]
 np :bok pw :kąt
 wielospi :bok + 5 :kąt :bokKonc
już

Projekt WIELOSPI.LGP w Komeniuszu


90

120

135

144

166

172

89

121

123

165

171

71