Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






If n < 6 then begin

Begin

writeln(n);

if n <= 5 then begin

F(n + 2);

F(n + 3)

End

end;

Найдите сумму чисел, которые будут выведены при вызове F(2).

Решение (вариант 1, построение дерева вызовов):

1) поскольку в начале каждого вызова на экран выводится значение единственного параметра функции, достаточно определить порядок рекурсивных вызовов и сложить значения параметров

2) поскольку при выполняется два рекурсивных вызова, решать такую задачу «на бумажке» удобно в виде двоичного дерева (в узлах записаны значения параметров при вызове функции):

3) складывая все эти числа, получаем 39

Ответ: 39.

 

Решение (вариант 2, подстановка):

1) можно обойтись и без дерева, сначала определим рекуррентную формулу; сумму чисел, полученных при вызове , обозначим через :

2) при n >5 процедура выводит число n и заканчивает работу без рекурсивных вызовов:

S(n) = n, при n >5

3) при n <=5 процедура выводит число n и вызывает следующие процедуры:

S(n) = n + S(n+2) + S(n+3) при n <=5

4) выполняем вычисления:

5) теперь остаётся вычислить ответ «обратным ходом», подставив значения в предыдущее выражение:

Ответ: 39.

 

 

ЕЩЕ ПРИМЕР

Дан рекурсивный алгоритм:

procedure F(n: integer);

Begin

writeln(n);

if n < 6 then begin

F(n+2);

F(n*3)

End

end;

Найдите сумму чисел, которые будут выведены при вызове F(1).

Решение (вариант 1, метод подстановки):

1) сначала определим рекуррентную формулу; обозначим через G(n) сумму чисел, которая выводится при вызове F(n)

2) при n >= 6 процедура выводит число n и заканчивает работу без рекурсивных вызовов:

G(n) = n, при n >= 6

3) при n < 6 процедура выводит число n и дважды вызывает сама себя:

G(n) = n + G(n+2) + G(3n) при n < 6

4) в результате вызова F(1) получаем

G(1) = 1 + G(3) + G(3)

G(3) = 3 + G(5) + G(9) = 3 + G(5) + 9

G(5) = 5 + G(7) + G(15) = 5 + 7 + 15 = 27

5) используем обратную подстановку:

G(3) = 3 + G(5) + 9 = 3 + 27 + 9 = 39

G(1) = 1 + 2*G(3) = 79

6) Ответ: 79.

 

 

<== предыдущая лекция | следующая лекция ==>
Описание конструкции и назначения детали | Советский Союз в системе международных отношений в 20-е-30-е годы.


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных