Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Как продвинуть сайт на первые места?
Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.

Ускорение продвижения
Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.

If n < 6 then begin






Begin

writeln(n);

If n < 5 then begin

F(n + 1);

F(n + 3)

End

end;

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

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

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

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

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

4) ответ: 49.

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

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

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

3) теперь остаётся вычислить ответ «обратным ходом»:

4)

5) Ответ: 49.

Ещё пример задания:

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

procedure F(n: integer);

Begin

writeln(n);

if n < 6 then begin

F(n+2);

F(n*3)

End

end;

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

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

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

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

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

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

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

9) в результате вызова 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

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

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

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

11) Ответ: 79.

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

1) п. 1-3 такие же, как в первом варианте решения

2) заполняем таблицу G(n) при n > = 6 (где G(n) = n)

n                              
G(n)                              

3) остальные ячейки заполняем, начиная с n = 5 справа налево, используя формулу:

G(n) = n + G(n+2) + G(3n)

n                              
G(n)                              

4) ответ читаем в самой левой ячейке

5) Ответ: 79.

Пример задания:

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

procedure F(n: integer);

Begin

writeln('*');






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.