Анализ рекурсивных алгоритмов с помощью рекуррентной формулы
Автор: Ромахина Татьяна Анатольевна Должность: учитель информатики и икт Учебное заведение: МБОУСОШ №12 Населённый пункт: город Североморск, Мурманская область Наименование материала: Дидактический материал Тема: Анализ рекурсивных алгоритмов с помощью рекуррентной формулы Раздел: полное образование
Рекурсивный алгоритм
это алгоритм , решающий
задачу путем сведения ее к
решению одной или
нескольких таких же задач, но
в сокращенном их варианте
Для определения
рекурсии необходимо
условие остановки рекурсии
(базовый случай или
несколько базовых случаев)
рекуррентная формула
Рекуррентная формула
это формула,
выражающая n-ый член
последовательности через
предыдущие члены
Примеры задач,
решаемых с
использованием
рекуррентных формул
Задача 1: дан рекурсивный алгоритм. Чему
будет равно значение, вычисленное
алгоритмом при выполнении вызова F(n)? n –
конкретное числовое значение
function F(n: integer): integer;
begin
if <условие> then
F:= <рекуррентная формула>
else
F:= <выражение, зависящее от n>;
end;
Задача 2: дан рекурсивный алгоритм. Чему
будет равно значение, вычисленное
алгоритмом при выполнении вызова F(n)? n –
конкретное числовое значение
function F(n: integer): integer;
begin
if <условие> then
F:= <выражение, зависящее от n>
else
F:= <рекуррентная формула>
end;
procedure F(n: integer);
begin
writeln(n);
if <условие> then begin
F(m);
F(k);
- - - -
end
end;
Задача 3: найдите сумму чисел, которые
будут выведены при вызове функции F(n). n –
конкретное числовое значение (
ниже представлены
типы рекурсивных алгоритмов (в общем виде), решаемые одним
способом)
procedure F(n: integer);
begin
if <условие> then begin
F(m);
F(k);
- - - -
end;
writeln(n);
end;
m,k – зависят от n
:
Сумму чисел, полученных при вызове
F(n) , обозначим через S(n).
Тогда соответствующая рекуррентная
формула будет иметь вид
Задача 4: найдите сумму чисел, которые
будут выведены при вызове функции F(n). n –
конкретное числовое значение
m,k – зависят от n
procedure F(n: integer);
begin
if <условие> then begin
F(m);
F(k);
- - - -
end
else
writeln(n)
end;
:
Соответствующая рекуррентная
формула будет иметь вид
procedure F(n: integer);
begin
writeln(n);
if <условие> then begin
writeln(n);
F(m);
F(k);
- - - -
end
end;
Задача 5: найдите сумму чисел, которые будут
выведены при вызове функции F(n). n –
конкретное числовое значение (
ниже представлены
типы рекурсивных алгоритмов (в общем виде), решаемые одним способом)
procedure F(n: integer);
begin
if <условие> then begin
writeln(n);
F(m);
F(k);
- - - -
end;
writeln(n);
end;
m,k – зависят от n
:
Соответствующая рекуррентная
формула будет иметь вид
Задача 6: найдите сумму чисел, которые будут
выведены при вызове функции F(n). n –
конкретное числовое значение
m,k – зависят от n
procedure F(n: integer);
begin
if <условие> then begin
writeln(n)
F(m);
F(k);
- - - -
end
else
writeln(n)
end;
:
Соответствующая рекуррентная
формула будет иметь вид
procedure F(n: integer);
begin
writeln(‘*’);
if <условие> then begin
F(m);
F(k);
- - - -
end
end;
Задача 7: Сколько символов "звездочка" будет
напечатано на экране при выполнении вызова F(n)?
n – конкретное числовое значение
(
ниже представлены типы
рекурсивных алгоритмов (в общем виде), решаемые одним способом)
procedure F(n: integer);
begin
if <условие> then begin
F(m);
F(k);
- - - -
end;
writeln(‘*’);
end;
m,k – зависят от n
:
Количество звездочек, которые
выводятся при вызове F(n) , обозначим
через G(n).
Соответствующая рекуррентная
формула будет иметь вид
Задача 8: Сколько символов "звездочка" будет
напечатано на экране при выполнении вызова F(n)?
n – конкретное числовое значение
m,k – зависят от n
procedure F(n: integer);
begin
if <условие> then begin
F(m);
F(k);
- - - -
end
else
writeln(‘*’)
end;
:
Соответствующая рекуррентная
формула будет иметь вид
procedure F(n: integer);
begin
writeln(‘*’);
if <условие> then begin
writeln(‘*’);
F(m);
F(k);
- - - -
end
end;
Задача 9: Сколько символов "звездочка" будет
напечатано на экране при выполнении вызова F(n)?
n – конкретное числовое значение
(
ниже представлены
типы рекурсивных алгоритмов (в общем виде), решаемые одним способом)
procedure F(n: integer);
begin
if <условие> then begin
writeln(‘*’);
F(m);
F(k);
- - - -
end;
writeln(‘*’);
end;
m,k – зависят от n
:
Соответствующая рекуррентная
формула будет иметь вид
Задача 10: Сколько символов "звездочка" будет
напечатано на экране при выполнении вызова F(n)?
n – конкретное числовое значение
m,k – зависят от n
procedure F(n: integer);
begin
if <условие> then begin
writeln(‘*’)
F(m);
F(k);
- - - -
end
else
writeln(‘*’)
end;
:
Соответствующая рекуррентная
формула будет иметь вид
procedure F(n: integer);
begin
if <условие> then
writeln(‘*’)
else begin
F(m);
F(k);
- - - -
end
end;
Задача 11: Сколько символов "звездочка" будет
напечатано на экране при выполнении вызова F(n)?
n – конкретное числовое значение
m,k – зависят от n
:
Соответствующая рекуррентная
формула будет иметь вид
Задача 12: Сколько символов "звездочка" будет
напечатано на экране при выполнении вызова F(n)?
n – конкретное числовое значение
m,k – зависят от n
procedure F(n: integer);
begin
if <условие> then
writeln(‘*’)
else begin
writeln(‘*’)
F(m);
F(k);
- - - -
end
end;
:
Соответствующая рекуррентная
формула будет иметь вид
Пример 1
Дан рекурсивный алгоритм:
function F(n: integer): integer;
begin
if n >= 3 then
F:= F(n-3) + F(n-2)*F(n-1)
else
F:= n;
end;
Чему будет равно значение, вычисленное
алгоритмом при выполнении вызова F(7)?
Заключение
1.
Представленные разработки основаны на примерах
анализа
рекурсивных
алгоритмов,
рассмотренных
на сайте К.Ю.Полякова.
2.
Еще большее количество заданий для тренировки
так же можно найти на сайте К.Ю.Полякова.