Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
10 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
154.50 kB
Просмотров:
109
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд
Содержание слайда: Рекурсивные
функции
№2 слайд
Содержание слайда: Рекурсивная (самовызываемая) это функция, которая прямо или косвенно вызывает сама себя.
Рекурсивная (самовызываемая) это функция, которая прямо или косвенно вызывает сама себя.
В косвенно рекурсивной функции находится обращение к другой функции, содержащей прямой или косвенный вызов первой.
Если в функции используется ее вызов, то это прямая рекурсия.
При каждом обращении к рекурсивной функции в памяти создается новый набор объектов, использующихся в ее коде.
№3 слайд
Содержание слайда: Рекурсивные алгоритмы эффективны в задачах, где рекурсия присутствует в определении обра-батываемых данных, поэтому они чаще всего используются для динамических данных с рекурсивной структурой (линейные и нелиней-ные списки).
Рекурсивные алгоритмы эффективны в задачах, где рекурсия присутствует в определении обра-батываемых данных, поэтому они чаще всего используются для динамических данных с рекурсивной структурой (линейные и нелиней-ные списки).
В рекурсивных функциях необходимо выполнять следующие правила:
– при каждом вызове в функцию передавать измененные данные (параметры);
– рекурсивный процесс шаг за шагом должен упрощать задачу так, чтобы для нее появилось нерекурсивное решение.
№4 слайд
Содержание слайда: Пример 1. Заданы два числа a и b, большее из них разделить на меньшее, используя рекурсию.
Пример 1. Заданы два числа a и b, большее из них разделить на меньшее, используя рекурсию.
double fun_rec (double, double);
void main (void)
{
double a, b;
cout << “ Input a, b : ”;
cin >> a >> b;
cout << “ Result = ” << fun_rec (a, b) << endl;
}
№5 слайд
Содержание слайда: double fun_rec ( double a, double b) {
double fun_rec ( double a, double b) {
if ( a < b ) return fun_rec ( b, a );
else return a / b;
}
Если a ≥ b, условие не выполняется и функция возвращает нерекурсивный результат a / b.
Если условие выполнилось, то функция fun_rec обращается сама к себе, аргументы в вызове меняются местами и последующее обращение приводит к тому, что условие снова не выпо-лняется и функция возвращает нерекурсивный, фактически равный b / a.
№6 слайд
Содержание слайда: Пример 2. Функция для вычисления факториала неотрицательного значения k (для отрица-тельных значений можно добавить проверку до вызова функции):
Пример 2. Функция для вычисления факториала неотрицательного значения k (для отрица-тельных значений можно добавить проверку до вызова функции):
double fact_rec (int k) {
if ( k < 2 ) return 1;
else
return k * fact_rec ( k – 1);
}
№7 слайд
Содержание слайда: Для значений k < 2 (напомним, что 0! = 1) функция возвращает 1, в противном случае вызывается та же функция с измененным параметром (k – 1) и результат умножается на текущее значение k.
Для значений k < 2 (напомним, что 0! = 1) функция возвращает 1, в противном случае вызывается та же функция с измененным параметром (k – 1) и результат умножается на текущее значение k.
Процесс выполняется до тех пор пока очередное уменьшенное на 1 значение k не станет меньше 2 и не приведет не к очередному вызову, а к выходу из функции, т.е. не выполнится
if ( k < 2 ) return 1;
№8 слайд
Содержание слайда: Схема выполнения функции fact_rec
Схема выполнения функции fact_rec
№9 слайд
Содержание слайда: Последнее значение 1 – результат выполнения условия k < 2 при k = 1, т.е. последовательность рекурсивных обращений к функции fact_rec прекращается при вызове fact_rec (1).
Последнее значение 1 – результат выполнения условия k < 2 при k = 1, т.е. последовательность рекурсивных обращений к функции fact_rec прекращается при вызове fact_rec (1).
Именно этот вызов приводит к последнему значению 1 в произведении, т.к. последнее выражение, из которого вызывается функция, имеет вид: 2 * fact ( 2 – 1).
№10 слайд
Содержание слайда: Блок-схема может иметь следующий вид
Блок-схема может иметь следующий вид