Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Тема урока: Рекурсия. Разработка программ с использованием рекурсивных функций.

Цель Д: ввести понятие рекурсии

Р:

В:

Тип урока:

Ход уроку

I.  Организационный момент

II.  Проверка домашнего задания

III.  Новая тема

Программы могут содержать вызов одной или нескольких подпрограмм. Подпрограммы могут, в свою очередь, вызывать другие подпрограммы.

Может ли подпрограмма вызывать саму себя?

Алгоритмическая конструкция, в какой подпрограмма вызывает сама себя, называется рекурсией.

Рекурсивные алгоритмы обычно возникают там, где исходную задачу можно привести к такой же, но с другими аргументами или в других обстоятельствах.

Рекурсия дает возможность записывать циклические алгоритмы без использования команд цикла. Рассмотрим примеры записи рекурсивных алгоритмов.

Вычисление факториала числа:

n!=1*2*3*…*n

1)  Обычный способ:

Fact:=1; for i:=1 to n do Fact=Fact * і ;

2)  Рекурсивный способ:

n!= 1, при n=0 (0!=1,1!=1по определению) ;

(n-1)!* n, при n>0.

Текст функции:

Function Fact( n : integer) : integer;

begin

If n=0 then Fact:=1 else Fact:= Fact(n-1) * n

end;

Вычисление степени с натуральним показателем хк

1) Обычный способ:

р:=1; for i:=1 to к do р=р*х ;

2)Рекурсивный способ:

1, при к = 0;

Хк=

хк-1, при к > 0.

Function Power( k : integer; x : real) : integer;

begin

If k=0 then Power:=1

else Power:=Power(k-1, x) * х

end;

Преимущества использования рекурсии:

рекурсивный алгоритм более короткий и более наглядный.

Недостатки:

для вычисление рекурсивного алгоритма на компьютере, нужно больше времени (за счет повторных обращений к подпрограмме) и в памяти (за счет дублирования локальных переменных подпрограммы).

Вычисление 15-го числа Фибоначчи
Fk= Fk-1+ Fk-2 (рекурсивный способ)

Внимание!

При вычислении 31-го числа Фибоначчи рекурсивным способом компьютер выполнит >1 млн. операций добавления, 45-го > 1 млрд.!!! (что может привести к переполнению стеку). Для сравнения: вычисление по обычному способу нуждается в 31 и 45 операций добавления соответственно!

Решение задач.

а)Program recursia;

Var

x, a,d:integer;

Function rec(n, a1:integer):integer;

Begin

if n=1 then rec:=a1 else rec:=rec(n-1,a1)+d

End;

Begin

Writeln('vvod chisla x, a,d');

Readln(x, a,d);

Writeln(rec(x, a));

readln;

End.

IV.  Подведение итогов урока

V.  Постановка домашнего задания

а)Program recursia;

Var

x:integer;

Function rec(n:integer):integer;

Begin

if n=0 then rec:=0 else

rec:=rec(n div 10)+n mod 10

End;

Begin

Writeln('vvod chisla x');

Readln(x);

Writeln(rec(x));

readln;

End.

б)Program recursia;

Var

x:integer;

Function rec(n:integer):integer;

Begin

if n=0 then rec:=0 else

rec:=rec(n div 10)+1

End;

Begin

Writeln('vvod chisla x');

Readln(x);

Writeln(rec(x));

readln;

End.