Dzięki funkcjom rekurencyjnym możemy uzyskać różne znane fraktale. Są to między innymi:

  • zbiór Cantora,

  • płatek Kocha,

  • dywan Sierpińskiego,

  • drzewo binarne.

Do tworzenia takich obrazów w języku Python doskonale nadaje się moduł turtle.

Ważne!

W funkcjach będziemy wykorzystywać obiekt klasy Turtle do utworzenia obiektu żółwia. Ponieważ funkcja rekurencyjna wywołuje samą siebie wielokrotnie, obiekt żółwia musi być do niej przekazany jako jeden z parametrów. W przeciwnym razie wyniki działania funkcji rekurencyjnej mogłyby być nieprzewidywalne.

Linia 1. from turtle import Turtle. Linia 2. zlw znak równości Turtle otwórz nawias okrągły zamknij nawias okrągły kratka definicja obiektu żółwia. Linia 4. def funkcja podkreślnik rekurencyjna otwórz nawias okrągły obiekt podkreślnik zolwia przecinek kropka kropka kropka zamknij nawias okrągły dwukropek. Linia 5. pass. Linia 7. kratka wywołanie. Linia 8. funkcja podkreślnik rekurencyjna otwórz nawias okrągły zlw przecinek kropka kropka kropka zamknij nawias okrągły.

Algorytm opisowy do generowania dywanu Sierpińskiego

Dywan Sierpińskiego otrzymujemy z kwadratu przez podzielenie go na dziewięć mniejszych kwadratów (3 x 3). Następnie środkowy kwadrat zostaje zamalowany. Ponownie rekurencyjnie wywołujemy tę funkcję dla każdego z pozostałych kwadratów.

1
Przykład 1

Spróbujmy zdefiniować algorytm tworzenia geometrycznej prezentacji:

Linia 1. dywan podkreślnik sierpinskiego otwórz nawias okrągły stopien przecinek dlugosc podkreślnik boku zamknij nawias okrągły. Linia 3. jeśli stopien jest równy 0. Linia 4. narysuj kwadrat o dlugosc podkreślnik boku w kolorze turkusowym. Linia 5. zakończ. Linia 6. w innym przypadku. Linia 7. narysuj kwadrat o dlugosc podkreślnik boku w kolorze białym. Linia 8. powtórz 4 razy. Linia 9. powtórz 2 razy. Linia 10. wywołaj dywan podkreślnik sierpinskiego otwórz nawias okrągły stopien minus 1 przecinek dlugosc podkreślnik boku prawy ukośnik 3 zamknij nawias okrągły. Linia 11. przesuń się do przodu o dlugosc podkreślnik boku prawy ukośnik 3. Linia 13. przesuń się do przodu o dlugosc podkreślnik boku prawy ukośnik 3. Linia 14. obróć się w prawo o 90 stopni.

Na podstawie powyższego opisu zapiszemy kod funkcji:

Linia 1. def dywan podkreślnik sierpinskiego otwórz nawias okrągły z przecinek stopien przecinek dl podkreślnik bok zamknij nawias okrągły dwukropek. Linia 3. def kwadrat otwórz nawias okrągły bok przecinek kolor zamknij nawias okrągły dwukropek. Linia 4. z kropka color otwórz nawias okrągły kolor zamknij nawias okrągły. Linia 5. z kropka begin podkreślnik fill otwórz nawias okrągły zamknij nawias okrągły. Linia 6. for i in range otwórz nawias okrągły 4 zamknij nawias okrągły dwukropek. Linia 7. z kropka forward otwórz nawias okrągły bok zamknij nawias okrągły. Linia 8. z kropka right otwórz nawias okrągły 90 zamknij nawias okrągły. Linia 9. z kropka end podkreślnik fill otwórz nawias okrągły zamknij nawias okrągły. Linia 11. if stopien znak równości znak równości 0 dwukropek. Linia 12. kwadrat otwórz nawias okrągły dl podkreślnik bok przecinek apostrof black apostrof zamknij nawias okrągły. Linia 13. return None. Linia 14. else dwukropek. Linia 15. kwadrat otwórz nawias okrągły dl podkreślnik bok przecinek apostrof white apostrof zamknij nawias okrągły. Linia 16. for i in range otwórz nawias okrągły 4 zamknij nawias okrągły dwukropek. Linia 17. for j in range otwórz nawias okrągły 2 zamknij nawias okrągły dwukropek. Linia 18. dywan podkreślnik sierpinskiego otwórz nawias okrągły z przecinek stopien minus 1 przecinek dl podkreślnik bok prawy ukośnik 3 zamknij nawias okrągły. Linia 19. z kropka forward otwórz nawias okrągły dl podkreślnik bok prawy ukośnik 3 zamknij nawias okrągły. Linia 20. z kropka forward otwórz nawias okrągły dl podkreślnik bok prawy ukośnik 3 zamknij nawias okrągły. Linia 21. z kropka right otwórz nawias okrągły 90 zamknij nawias okrągły.

Efekt wykonania algorytmu wygląda następująco:

Linia 1. kratka poniższe wiersze niezbędne są dla wykonania. Linia 2. from turtle import Turtle. Linia 3. zl znak równości Turtle otwórz nawias okrągły zamknij nawias okrągły. Linia 5. kratka przenosimy żółwia w konkretne miejsce układu współrzędnych. Linia 6. kratka aby narysowany obraz dobrze mieścił się w oknie. Linia 7. zl kropka penup otwórz nawias okrągły zamknij nawias okrągły. Linia 8. zl kropka goto otwórz nawias okrągły minus 300 przecinek 300 zamknij nawias okrągły. Linia 9. zl kropka pendown otwórz nawias okrągły zamknij nawias okrągły. Linia 11. dywan podkreślnik sierpinskiego otwórz nawias okrągły zlw przecinek 3 przecinek 500 zamknij nawias okrągły.
R11c8pYfgKo8V
Dywan Sierpińskiego - efekt po wykonaniu kilku pierwszych kroków
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

fraktal
fraktal

(łac. fractus – złamany, cząstkowy, ułamkowy) obiekt składający się z coraz bardziej złożonych detali, z których każdy jest podobny do całości

przestrzeń nazw
przestrzeń nazw

(ang. namespace) miejsce w pamięci operacyjnej, w której jest przechowywana dana zmienna; najczęściej przestrzeń nazw wiąże się z funkcją, a zmienne używane w niej są widoczne tylko w obrębie tej przestrzeni – jest to „zakres obowiązywania” tych zmiennych

rekurencja
rekurencja

proces polegający na wywoływaniu funkcji przez siebie samą do momentu rozwiązania określonego zadania

turtle
turtle

(z ang. żółw) moduł (standardowa biblioteka) w języku Python realizujący grafikę żółwia