Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L03.doc
Скачиваний:
7
Добавлен:
12.07.2019
Размер:
212.48 Кб
Скачать

Рекурсия

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

Если задача сводится к себе, и еще раз к себе, и так далее, то количество обращений к себе должно быть конечным.

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

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

Пример.

Применяя сведение задачи к себе n раз, можно «дойти» до тривиального случая – до значения 0!, а оно равно 1.

Пример 2.

Применение такого сведения задачи к себе приводит к «зацикливанию».

Числа Фибоначчи выражаются сами через себя при , но выражаются явно (дают тривиальный случай) при и :

, , , .

, – Golden Ratio.

Сумма убывающей геометрической прогрессии

, ,

есть функциональный (а именно, степенной, по степеням переменной ) ряд с коэффициентами 1, 1, … .

Полиномы Фибоначчи являются коэффициентами разложения в степенной ряд функции

, .

Полиномы Фибоначчи выражаются «сами через себя» при , но выражаются явно (дают тривиальный случай) при и :

, ,

Связь с числами Фибоначчи:

TEX (Дональд Кнут)

Пример рекурсивной функции

function Fib(n: integer; x: double): double;

begin

if n < 1 then

Fib := 0

else

if n = 1 then

Fib := 1

else

if n = 2 then

Fib := x

else

Fib := x*Fib(n-1, x) + Fib(n-2, x);

end;

Пример. Ханойские башни.

var

n: integer;

procedure HanoiTowers(n, x, y, z: integer);

begin

if n = 1 then

writeln(x,'->', y)

else

begin

HanoiTowers(n-1, x, z, y);

writeln(x,’–>’, y);

HanoiTowers(n-1, z, y, x);

end;

end;

begin

readln(n);

HanoiTowers(n,1,2,3);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]