Выбранный для просмотра документ Презентация1.pptx
Скачать материал "Методическая разработка урока Информатики и ИКТ в соответствии с требованиями ФГОС по теме «Рекурсия. Рекурсивные алгоритмы»"
Рабочие листы
к вашим урокам
Скачать
1 слайд
Рекурсия
2 слайд
Что же такое рекурсия?
Чтобы понять, что такое рекурсия, надо понять, что такое рекурсия.
Рекурсия – это такой способ организации вспомогательного алгоритма (подпрограммы), при котором эта подпрограмма (процедура или функция) в ходе выполнения её операторов обращается сама к себе.
3 слайд
РЕКУРСИЯ
Числовая
Графическая
Символьная
4 слайд
Особенности рекурсии.
Рекурсия полезна, прежде всего, в случаях, когда основную задачу можно разделить на подзадачи, имеющие ту же структуру, что и первоначальная задача. Подпрограммы, реализующие рекурсию, называются рекурсивными.
Использование рекурсивной формы организации алгоритма обычно выглядит более изящно.
Недостатки рекурсии:
если глубина рекурсии (количество одновременно выполняемых процедур) очень велика, то оттранслированная программа будет требовать во время исполнения много памяти – это может привести к переполнению стека,
рекурсивные алгоритмы обычно выполняются более медленно.
5 слайд
Задача 1. Ниже записан рекурсивный алгоритм F на языке Паскаль. Что напечатает программа? Чему равна сумма всех чисел, напечатанных на экране при выполнении вызова F(2)?
Procedure F (n: integer) ;
begin
writeln(n);
if n<=4 then
begin
F(n*2);
F(n+1);
end;
еnd;
Решение. Так как в процедуре имеются два
рекурсивных вызова F(n*2) и F(n+1), то дерево
будет двоичным. Левым потомком будет вызов вида F(n*2),
правым – F(n+1). Корень дерева – самый первый вызов F(2).
Напечатали 2, вызвали F(2*2)=F(4); напечатали 4, проверяем 4<=4 – истина, вызывается F(2*4)=F(8) (8<=4 – ложь), выполнение программы продолжается в копии F(4 ) c оператора вызова F(4+1)…
F(2)
F(4)
F(8)
F(5)
F(3)
F(6)
F(4)
F(8)
F(5)
Ответ на первый вопрос: 2 4 8 5 3 6 4 8 5
Ответ на второй вопрос: 2+4+8+5+3+6+4+8+5=45(сумма чисел в узлах дерева)
6 слайд
Рассмотрим результат работы программы при ином расположении оператора печати:
Procedure F(n: integer);
begin
if n<=4 then
begin
writeln (n);
F(n*2);
F(n+1);
end;
еnd;
При том же дереве рекурсивных вызовов процедура F напечатает только значения, меньшие или равные четырем.
Ответ будет 2 4 3 4, сумма их будет 2+4+3+4=13.
7 слайд
Эту же задачу решим, если нас интересует итоговая сумма.
Второй способ решения. Считаем, что F(n) – сумма чисел, которые будут выведены на экран при вызове F(n). Если n>=4, то F(n)=n (программа выводит число n и дальше не выполняется). При n<=4 рекуррентное выражение запишется: F(n)= n + F(2*n) + F(n+1). Так как подпрограмма выводит на экран число n, а также вызывает F(2*n) и F(n+1), которые добавляют на экран соответствующую сумму чисел, которые мы складываем. Начинаем запись с последнего натурального числа, которое удовлетворяет условию в операторе if.
Для записи вызова функции F() в строку записываем или ранее вычисленное значение для этой функции (если оно есть), или просто число, получаемое в качестве аргумента функции.
Начнем с F(8), так как наибольшее n, при котором будет вызываться F(n) – это F(4*2).
F(8)=8, F(7)=7, F(6)=6, F(5)=5
F(4)=4+F(2*4)+F(4+1)=4+F(8)+F(5)=4+8+5=17
F(3)=3+F(2*3)+F(3+1)=3+F(6)+F(4)=3+6+17=26
F(2)=2+F(2*2)+F(2+1)=2+F(4)+F(3)=2+17+26=45
Ответ: 45
8 слайд
Пример рекурсивной процедуры:
procedure Rec(a: integer);
begin
if a>0 then
Rec(a-1);
writeln(a);
end;
Рассмотрим, что произойдет, если в основной программе поставить вызов, например, вида Rec(3). Ниже представлена блок-схема, показывающая последовательность выполнения операторов. Рассмотрим блок-схему работы рекурсивной программы.
9 слайд
Рис. 1. Блок схема работы рекурсивной процедуры.
10 слайд
Еще один визуальный образ происходящего представлен на рисунке:
11 слайд
4. Практическая работа. Имеется рекурсивный алгоритм:
procedure F(n: integer);
begin
writeln(n);
if n<6 then begin
F(n+1);
F(n*2);
end;
end;
Что напечатает программа при вызове F(2)? Запишите выводимые значения через пробел.
Предлагаю сначала решить данную задачу в тетради, а затем проверить на компьютере.
Ответ: 2 3 4 5 6 10 8 6 4 5 6 10 8.
12 слайд
5. Работа в группах. Решите следующие задачи: Ниже записан рекурсивный алгоритм F на языке Паскаль. Что напечатает программа (ответ запишите через пробел)? Чему равна сумма всех чисел, напечатанных на экране при выполнении вызова F(2)?
1) Procedure F (n: integer) ; 2) Procedure F (n: integer);
begin begin
if n<=4 then if n<=4 then
begin begin
writeln(n); F(n*2);
F(n*2); F(n+1);
F(n+1); end;
end; writeln(n);
end; end;
Ответ:2 4 3 4 ; 13 Ответ: 8 5 4 6 8 5 4 3 2; 46
3) Procedure F (n: integer);
begin
if n<=4 then
begin
F(n*2);
writeln(n);
F(n+1);
end;
end;
Ответ: 4 2 3 4; 13
13 слайд
Разбор решения задания 11 демоверсии ЕГЭ
Рекурсивные алгоритмы
Задача1. Ниже записаны две рекурсивные процедуры, F и G:
procedure F(n: integer); forward;
procedure G(n: integer); forward;
procedure F(n: integer);
begin
if n > 0 then
G(n - 1);
end;
procedure G(n: integer);
begin
writeln('*');
if n > 1 then
F(n - 3);
end;
Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(11)?
14 слайд
Решение:
Паскаль, встретив команду F(11), вызывает процедуру F и передает ей параметр n = 11:
в случае выполнения условия n > 0 выполняется следующая строка: G(n - 1), вызывающая процедуру G (10) после уменьшения n на 1;
процедура G печатает звездочку и, в случае выполнения условия n > 1, уменьшает значение n на 3, затем с новым параметром вызывает процедуру F(7);
в случае выполнения условия n > 0 выполняется следующая строка: G(n - 1), вызывающая процедуру G (6) после уменьшения n на 1;
процедура G печатает звездочку и, в случае выполнения условия, уменьшает значение n на 3, затем с новым параметром вызывает процедуру F(3)
в случае выполнения условия n > 0 выполняется следующая строка: G(n - 1), вызывающая процедуру G(2) после уменьшения n на 1;
процедура G печатает звездочку и, в случае выполнения условия, уменьшает значение n на 3, затем с новым параметром вызывает процедуру F(-1)
получив значение -1 и убедившись, что условие не выполнилось, Паскаль завершает выполнение программы.
А нам остается подсчитать, сколько раз печаталась звездочка. В нашем случае это произошло ровно 3 раза.
Ответ: 3
15 слайд
Задача 2. Ниже записаны две рекурсивные процедуры F и G:
Procedure F(n: integer); forward;
Procedure G(n: integer); forward;
Procedure F(n: integer);
begin
if n>0 then
G(n-1);
writeln (‘*’);
end;
Procedure G(n: integer);
begin
writeln(‘*’);
If n>1 then
F(n-2);
end;
Сколько символов “звездочка” будет напечатано на экране при выполнении вызова F(11)?
16 слайд
Решение. Паскаль, встретив команду F(11), вызывает процедуру F и передает ей параметр n = 11:
в случае выполнения условия n > 0 выполняется следующая строка: G(n - 1), вызывающая процедуру G (10) после уменьшения n на 1,
процедура G печатает звездочку и, в случае выполнения условия n > 1, уменьшает значение n на 2, затем с новым параметром вызывает процедуру F(8);
в случае выполнения условия n > 0 выполняется следующая строка: G(n - 1), вызывающая процедуру G (7) после уменьшения n на 1,
процедура G печатает звездочку и, в случае выполнения условия, уменьшает значение n на 2, затем с новым параметром вызывает процедуру F(5);
в случае выполнения условия n > 0 выполняется следующая строка: G(n - 1), вызывающая процедуру G(4) после уменьшения n на 1,
процедура G печатает звездочку и, в случае выполнения условия, уменьшает значение n на 2, затем с новым параметром вызывает процедуру F(2);
в случае выполнения условия n>0 выполняется следующая строка: G(n-1), вызывающая процедуру G (1), печатается звездочка, условие 1>1 не выполняется. Возвращаемся в F(2), печатаем звездочку, завершаем F(2), завершаем G(4), возвращаемся в F(5), печатаем звездочку, завершаем F(5), завершаем G(7), возвращаемся в F(8), печатаем звездочку, завершаем F(8), завершаем G(10), возвращаемся в F(11), печатаем звездочку, завершаем F(11). Паскаль завершает выполнение программы. Ответ: 8
17 слайд
Домашнее задание:
Задание №1. Дан рекурсивный алгоритм:
procedure F(n: integer);
begin
writeln(n);
if n < 5 then begin
F(n + 1);
F(n + 3);
end;
end;
Найдите сумму чисел, которые будут выведены при вызове F(1).
18 слайд
Задание 2. Дан рекурсивный алгоритм:
procedure F(n: integer);
begin
writeln(n);
if n < 6 then begin
F(n+2);
F(n*3);
end;
end;
Найдите сумму чисел, которые будут выведены при вызове F(1). Что выведет программа на экран при вызове F(1)?
19 слайд
Спасибо за работу в классе.
Желаю успеха при решении задач, содержащих рекурсивные алгоритмы!
Рабочие листы
к вашим урокам
Скачать
Выбранный для просмотра документ план урока.docx
Скачать материал "Методическая разработка урока Информатики и ИКТ в соответствии с требованиями ФГОС по теме «Рекурсия. Рекурсивные алгоритмы»"
Рабочие листы
к вашим урокам
Скачать
Рабочие листы
к вашим урокам
Скачать
6 672 236 материалов в базе
«Информатика. Углубленный уровень (в 2-ух частях) », Поляков К.Ю., Еремин Е.А.
§ 61. Рекурсия
Больше материалов по этой темеНастоящий материал опубликован пользователем Писаревская Людмила Ильинична. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Курс повышения квалификации
36 ч. — 180 ч.
Курс профессиональной переподготовки
500/1000 ч.
Курс профессиональной переподготовки
300/600 ч.
Мини-курс
6 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.