If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Запълване на Серпински

Досега примерите за рекурсия изискваха едно извикване на рекурсията всеки път. Но понякога се налага да направиш няколко рекурентни извиквания. Ето един добър пример – фрактална математическа конструкция, известна като запълване на Серпински:
Пълно запълване на Серпински
Както виждаш, това е колекция от малки квадрати, нарисувани в определен шаблон в квадратна област. Ето как ги рисуваме. Започваме с областта на запълнен квадрат и я разделяме на четири секции:
Запълване на Серпински 2 по 2
Взимаме трите квадрата с × през тях – горен ляв, горен десен и долен десен – и ги разделяме на четири части по същия начин:
Запълване на Серпински 4 по 4
Продължаваме. Разделяме всеки квадрат с × на четири части и поставяме × в горния ляв, горния десен и долния десен квадрати, но никога в долния ляв.
Запълване на Серпински 8 по 8
Запълване на Серпински 16 по 16
Запълване на Серпински 32 по 32
Запълване на Серпински 64 по 64
Когато квадратите са достатъчно малки, спираме да делим. Ако запълним всеки квадрат с × и забравим за всички останали квадрати, получаваме запълване на Серпински. Ето как изглежда:
Пълно запълване на Серпински
За да обобщим, ето как рисуваме запълване на Серпински в квадрат:
  • Определяме колко малък е квадратът. Ако е достатъчно малък, за да бъде основен случай, тогава просто го запълваме. Можеш да решиш колко малък е един "достатъчно малък" квадрат.
  • Иначе разделяме квадрата на горен ляв, горен десен, долен десен и долен ляв квадрати. Рекурентно "решаваме" три подзадачи:
    1. Чертаем запълване на Серпински в горния ляв квадрат.
    2. Чертаем запълване на Серпински в горния десен квадрат.
    3. Чертаем запълване на Серпински в долния десен квадрат.
Забележи, че трябва да извършиш не просто едно, а три рекурентни повиквания. Ето защо избрахме запълването на Серпински, за да онагледим множествената рекурсия.
Можеш да избереш всеки три от четирите квадрата, в които рекурентно чертаеш запълвания на Серпински. Ще получиш като резултат горната рисунка, завъртяна на брой градуси, кратен на 90. (Ако начертаеш рекурентно запълване на Серпински в някакъв друг брой квадрати, няма да получиш интересен резултат.)
Програмата по-долу чертае запълване на Серпински. Опитай да добавиш и махнеш коментарите на някои от рекурентните повиквания, за да получиш ротация:

Това съдържание е резултат от съвместната дейност на преподавателите по Компютърни науки в Дартмут Thomas Cormen и Devin Balkcom, както и на екипа по компютърни науки на Кан Академия. Съдържанието е лицензирано CC-BY-NC-SA.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.