1 2 3 4 Ім'я файлу: Рекурсія - укр.doc 7.3. Визначення вузла дерева по його номеруРозширення: doc Розмір: 544кб. Дата: 04.03.2020 скачати Пов'язані файли: МОДЕЛІ ДАНИХ.ppt Ідея даного підходу в тому, щоб замінити рекурсивні виклики простим циклом, який виконається стільки раз, скільки вузлів в дереві, утвореному рекурсивними процедурами. Що саме буде робитися на кожному кроці, слід визначити за номером кроку. Зіставити номер кроку і необхідні дії - завдання не тривіальна і в кожному випадку її доведеться вирішувати окремо. Наприклад, нехай потрібно виконати k вкладених циклів по n кроків в кожному:
Якщо k заздалегідь невідомо, то написати їх явно, як показано вище неможливо. Використовуючи прийом, продемонстрований в розділі 6.5 можна отримати необхідну кількість вкладених циклів за допомогою рекурсивної процедури:
Щоб позбутися від рекурсії і звести все до одного циклу, звернемо увагу, що якщо нумерувати кроки в системі числення з основою n , то кожен крок має номер, що складається з цифр i1, i2, i3, ... або відповідних значень з масиву Indexes. Тобто цифри відповідають значенням лічильників циклів. Номер кроку в звичайній десятковій системі числення: Всього кроків буде n k . Перебравши їх номери в десятковій системі числення і перевівши кожен з них в систему з основою n , отримаємо значення індексів:
Ще раз відзначимо, що метод не універсальний і під кожну задачу доведеться придумувати щось своє. Ще один чудовий приклад - обчислення за номером кроку перекладань в завданню про Ханойські вежах дивіться тут: http://algolist.manual.ru/maths/combinat/hanoi.php Контрольні питання 1. Визначте, що зроблять наведені нижче рекурсивні процедури та функції. (А) Що надрукує наведена нижче процедура при виклику Rec (4)?
(Б) Чому дорівнюватиме значення функції Nod (78, 26)?
(В) Що буде надруковано наведеними нижче процедурами при виклику A (1)?
(Г) Що надрукує нижеприведенная процедура при виклику BT (0, 1, 3)?
2. Уроборос - змій, який пожирає власний хвіст (рис. 14) в розгорнутому вигляді має довжину L , діаметр біля голови D , товщину черевної стінки d . Визначте, скільки хвоста він зможе в себе впихнути і в скільки шарів після цього буде покладений хвіст? Рис. 14. Розгорнутий Уроборос. 3. Для дерева на рис. 10а вкажіть послідовності відвідування вузлів при прямому, зворотному і кінцевому порядку обходу. 4. Зобразіть графічно дерево, заданий за допомогою вкладених дужок: (A (B (C, D), E), F, G). 5. Зобразіть графічно синтаксичне дерево для наступного арифметичного виразу: Запишіть це вираження в зворотної польської записи. 6. Для наведеного нижче графа (рис. 15) запишіть матрицю суміжності і матрицю інцидентності. Рис. 15.5> 1 2 3 4 |