Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации лекций по ТОИ / 12-Процедуры и функции - примеры реализации рекурсии.pps
Скачиваний:
50
Добавлен:
02.06.2015
Размер:
9.38 Mб
Скачать

НИУ ВШЭ – Пермь

Факультет бизнес-информатики

Кафедра информационных технологий в бизнесе

Процедуры и функции на примере языка Pascal:

рекурсия и итерация.

Примеры реализации

Материалы курса «Теоретические основы информатики»

Лекция 12

Лядова Л.Н.

Пермь 2012

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

Итерация:

Program Main;

var N, Fact: integer;

Function FactorIter(N: Integer): Integer; var F: integer;

begin

F := 1;

for N := N downto 1 do F := F*N;

FactorIter := F end;

begin

write('Введите N: N = '); readln(N); Fact := FactorIter(N);

write('Результат: значение N! для N =', N:2, ' равно ', Fact);

2end.

Рекурсия:

Program Main;

var N, Fact: integer;

Function FactorRec(N: Integer): Integer; begin

if N = 0

then FactorRec := 1

else FactorRec := FactorRec(N-1)*N end;

begin

write('Введите N: N = '); readln(N); Fact := FactorRec(N);

write('Результат: значение N! для N =', N:2, ' равно ', Fact);

end.

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

Вычисление 0!

Ввод исходных данных для вычисления факториала

3

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

итерация

Стек

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Просмотр значений, используемых

 

 

 

 

(вычисляемых) в программе.

 

 

 

 

Введено значение

N=0.

 

Значение Fact

 

проинициализировано как

 

глобальная переменная.

 

Имя F – вне области видимости

4

(определено в описании функции)

 

 

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

Вызов функции

Видимые имена – глобальные переменные программы

5

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

Стек

Точка входа в функцию

Локальные данные функции.

 

 

 

 

Result используется для

 

 

 

 

 

 

вычисления результата

 

 

 

функции – этим именем

 

 

 

 

FactorIter(0)

 

можно заменить имя

 

F

 

 

 

 

 

 

функции в присваивании (в

 

 

 

 

 

 

 

N=0

данной реализации Pascal)

 

 

 

 

 

 

FactorIter (Result)

 

 

 

 

 

 

 

 

 

 

 

Точка возврата

6

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

Стек

FactorIter(0)

F=1

N=0

FactorIter (Result)

Точка возврата

7

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

Стек

FactorIter(0)

F=1

N=0

FactorIter (Result)

Точка возврата

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

Стек

FactorIter(0) F=1

N=0

FactorIter (Result) = 1

Точка возврата

9

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

Стек

Возврат вычисленного значения в оператор присваивания

FactorIter(0)

F=1

N=0

FactorIter (Result) = 1

Точка возврата

10