Июнь 2007 1 Рекурсия Итерация свойственна человеку, рекурсия - божественна. Л. Питер Дойч.

Презентация:



Advertisements
Похожие презентации
Методы разработки алгоритмов 1 Итерация или рекурсивность 2 Метод полного перебора 3 Метод Greedy– «жадный» алгоритм 4 Метод перебора с возвратом 5 Метод.
Advertisements

РЕКУРСИЯ РЕКУРРЕНТНЫЕ СООТНОШЕНИЯ У попа была собака - он ее любил. Она съела кусок мяса - он ее убил. Вырыл ямку - закопал, Взял дощечку – написал: У.
Рекурсия В программировании рекурсия вызов функции ( процедуры ) из неё же самой, непосредственно ( простая рекурсия ) или через другие функции ( сложная.
Вспомогательный алгоритм Вспомогательный алгоритм Вспомогательный алгоритм Вспомогательный алгоритм Метод пошаговой детализации Метод пошаговой детализации.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Тема 1. Модульность. Основы модульного программирования Одной из распространенных методик создания программной продукции в настоящее время является структурное.
Процедуры и функции Вспомогательные алгоритмы (подпрограммы) создаются тогда, когда возникает необходимость в многократном использовании одного и того.
Подпрограммы Лекция 7. Ломаско Павел Сергеевич16 декабря 2013 г.
1 Рекурсивное программирование Рекурсия – это метод, сводящий общую задачу к некоторым задачам более узкого, простого типа Рекурсивный алгоритм – это алгоритм,
Рекурсия « Я оглянулся посмотреть, не оглянулась ли она, чтоб посмотреть, не оглянулся ли я...» М. Леонидов.
Часть 1: «Основы программирования». Содержание Основные понятия. Структура программы. Ввод-вывод Программирование циклов. Операторы цикла while, for и.
Подпрограммы. Функции и процедуры. Кулебякин В.В.
Понятие Вспомогательный алгоритм – это алгоритм, целиком используемый в составе других алгоритмов.
Программирование на языке Паскаль Тема 13. Процедуры Тема 14. Функции.
Пример 2 Записать корректно подстановку Решение. Пример 3 Вычислить функцию-константу: Решение.
Рекурсия в ПРОЛОГе Понятие рекурсии Примеры рекурсивных объектов Рекурсивные правила в ПРОЛОГе Примеры рекурсивных правил Вычисление факториала Последовательность.
Семинар 3. Рекурсивные отношения в языке Prolog. Отладка программ в Strawberry Prolog СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА.
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Тема урока. «Рекурсивные алгоритмы» Словарик: Самоподобный объект Рекурсия Фрактал Кто вечно хнычет И скучает, Тот ничего Не замечает. Кто ничего Не замечает,
Транксрипт:

Июнь Рекурсия Итерация свойственна человеку, рекурсия - божественна. Л. Питер Дойч

Июнь Основные вопросы Основные понятия. Основные понятия. Виды рекурсии. Виды рекурсии. Область применения рекурсивных функций. Область применения рекурсивных функций. Достоинства и недостатки рекурсии. Достоинства и недостатки рекурсии. Замена рекурсии итерацией. Замена рекурсии итерацией. Замена итерации рекурсией. Замена итерации рекурсией. Особенности работы с памятью Особенности работы с памятью

Июнь Понятие рекурсии Рекурсия - это способ организации обработки данных, при котором программа (процедура) вызывает сама себя непосредственно, либо с помощью другой программы (процедуры). Рекурсия - это способ организации обработки данных, при котором программа (процедура) вызывает сама себя непосредственно, либо с помощью другой программы (процедуры). Морис Эшер «Рисующие руки» И обнаружил микроскоп Что на клопе бывает клоп, Питающийся паразитом. На нём - другой, ad infinitum. Джонатан Свифт

Июнь Прямая и косвенная рекурсии Прямая рекурсия – вызов подпрограммы непосредственно в ее теле Прямая рекурсия – вызов подпрограммы непосредственно в ее теле Косвенная рекурсия – вызов подпрограммы через другие подпрограммы, например, когда процедура А вызывает процедуру B, процедура B – процедуру C, процедура C – процедуру А. Косвенная рекурсия – вызов подпрограммы через другие подпрограммы, например, когда процедура А вызывает процедуру B, процедура B – процедуру C, процедура C – процедуру А.

Июнь Пример прямой рекурсии – вычисление факториала int Fact(int n){ if(n<2) return 1; return (n* Fact(n-1)); } int Fact(int n){ return (n>1)?(n* Fact(n-1):1; }… int res = Fact(4); 1. Вызов Fact(4) 1. Вызов Fact(3) 1. Вызов Fact(2) 1. Вызов Fact(1) 1. Возврат 1 2. Возврат 1*2 2. Возврат 2*3 2. Возврат 6*4 2. res = 24;

Июнь Состав рекурсивной функции Проверка, достигнуто ли граничное значение. Проверка, достигнуто ли граничное значение. Если достигнуто – вычисляется возвращаемое значение без рекурсивного вызова. Если достигнуто – вычисляется возвращаемое значение без рекурсивного вызова. Если граничное значение не достигнуто – используется рекурсивный вызов с более простым параметром (параметром, который ближе к граничному значению). Если граничное значение не достигнуто – используется рекурсивный вызов с более простым параметром (параметром, который ближе к граничному значению).

Июнь Область применения рекурсии 1. Компактная реализация рекурсивных алгоритмов 2. Работа со структурами данных, которые описаны рекурсивно, например, двоичные деревья.

Июнь Двоичное дерево

Июнь Достоинства и недостатки рекурсии Компактная запись, лаконичность при реализации рекурсивных алгоритмов Компактная запись, лаконичность при реализации рекурсивных алгоритмов Накладные расходы на дополнительные вызовы функций Накладные расходы на дополнительные вызовы функций Возможность переполнения стека Возможность переполнения стека Сложность алгоритма для понимания Сложность алгоритма для понимания

Июнь Вычисление факториала Возвращаемое значение 1 Параметр 1 Адрес возврата Возвращаемое значение 2 Параметр 2 Адрес возврата Возвращаемое значение 6 Параметр 3 Адрес возврата Возвращаемое значение 24 Параметр 4 Адрес возврата Вызов Fact(4) Вызов Fact(3) Вызов Fact(2) Вызов Fact(1) Если в функции используются локальные переменные, то под них также будет резервироваться место в стеке

Июнь Использование глобальных переменных В рекурсивных функциях использование глобальных переменных ограничено В рекурсивных функциях использование глобальных переменных ограничено Модификация глобальной переменной отразится на всей цепочке вызовов функции. Модификация глобальной переменной отразится на всей цепочке вызовов функции. Невозможно определить на каком шаге рекурсии была модифицирована глобальная переменная. Невозможно определить на каком шаге рекурсии была модифицирована глобальная переменная.

Июнь Замена рекурсии итерацией Любую рекурсивную функцию можно реализовать без применения рекурсии, для этого программист должен обеспечить хранение всех необходимых данных Любую рекурсивную функцию можно реализовать без применения рекурсии, для этого программист должен обеспечить хранение всех необходимых данных int Fact(int n){ int res = 1; for(int i = 1; i<=n; i++) res *=i; return res; }

Июнь Замена итерации рекурсией Любую итерацию можно заменить с помощью рекурсии Любую итерацию можно заменить с помощью рекурсии void fill(int *m, int size){ for(int i = 0; i<size; i++) m[i] = 0; } void fillRecurs(int *m,int size){ if(size == 0) return; m[size-1] = 0; fillRecurs(m,size-1);}

Июнь Вопросы к экзамену Рекурсия. Основные понятия. Виды рекурсии. Область применения рекурсивных функций. Достоинства и недостатки рекурсии. Замена рекурсии итерацией. Замена итерации рекурсией. Рекурсия. Основные понятия. Виды рекурсии. Область применения рекурсивных функций. Достоинства и недостатки рекурсии. Замена рекурсии итерацией. Замена итерации рекурсией.