Задание 16
- Процедура (функция)– это вспомогательный алгоритм (фрагмент кода программы), который служит для выполнения определенных действий.
- выполнения одинаковых действий в различных местах одной и той же программы;
- разбивки программы (или другой процедуры или функции) на подзадачи для улучшения читаемости кода;
- подпрограммы располагаются всегда выше основной программы:
- сначала составляется заголовок процедуры или функции, в котором перечисляются формальные параметры, они обозначаются идентификаторами, как переменные (т.к. формальные параметры могут меняться, также как переменные):
- в месте вызова процедуры в круглых скобках указываются фактические параметры (числовые значения либо арифметические выражения) в том же порядке:
- функция вызывается немного иначе:
- компилятор не будет выполнять процедуру (функцию) до момента ее вызова в основной программе;
- пример работы процедуры и функции для сложения двух значений (порядок действий компилятора указан числами):
- Рекурсивной называется процедура, вызывающая сама себя:
- условие остановки рекурсии (обычно, в виде условного оператора):
- рекуррентную формулу (обычно, вызов самой себя с измененным параметром):
- Из условия задания мы имеем рекуррентную формулу: F(n–1) * (n + 2) и условие остановки рекурсии: n > 1.
- Поскольку рекуррентная формула уже задана, то остается подставить в нее начальный параметр — число 5:
- Теперь применим эту формулу для всех вызываемых вложенных функций, вплоть до F(1) (при котором «сработает» остановка рекурсии). Получим:
- На F(2) необходимо остановиться, так как действует условие остановки рекурсии: формула работает для n > 1. Также учтем, что по условию F(1) = 1.
- Теперь с конца к началу перепишем все получившиеся сомножители и перемножим их:
- Из условия задания мы имеем рекуррентную формулу: 2 * F(n–1) + F(n-2) и условие остановки рекурсии: n > 1.
- Из заданной рекуррентной формулы видим, что функция зависит от предыдущей функции (F(n–1)) и от пред-предыдущей функции (F(n-2)).
- Так как первые два значения заданы (F(0) = 1, F(1) = 1), то можно построить таблицу последующих значений, двигаясь к числу 6:
- Таким образом, получаем, что при вызове функции F(6) результатом будет число 99
- Поскольку рекуррентная формула уже задана, то остается подставить в нее начальный параметр — число 6:
- Теперь применим эту формулу для всех вызываемых вложенных функций, вплоть до F(2) (F(1) и F(0) известны из условия задачи). Получим:
- Теперь с конца к началу перепишем все получившиеся значения функций:
Предназначена для:
Особенности программирования процедур (функций):
Подробное описание работы с процедурами можно найти, перейдя по ссылке.
Для использования рекурсии, необходимо задать:
Решение по рекуррентной формуле
16_1:
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(1) = 1 F(n) = F(n–1) * (n + 2), при n > 1
Чему равно значение функции F(5)? В ответе запишите только целое число.
Типовые задания для тренировки
:
✎ Решение с использованием программирования:
PascalABC.NET (решение №1):
PascalABC.NET (решение №1):
PascalABC.NET (решение №2):
Питон:
C++:
✎ Решение теоретическое (методом с конца к началу):
F(5) = F(4) * 7
F(5) = F(4) * 7
F(4) = F(3) * 6
F(3) = F(2) * 5
F(2) = F(1) * 4
1
1 * 4 * 5 * 6 * 7 = 840Результат: 840
16_2:
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(0) = 1, F(1) = 1 F(n) = 2 * F(n–1) + F(n-2), при n > 1
Чему равно значение функции F(6)? В ответе запишите только целое число.
✎ Решение с использованием программирования:
PascalABC.NET (решение №2):
PascalABC.NET (решение №2):
✎ Решение 1. Теоретическое (метод решения с начала к концу):
| n | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| F(n) 2*F(n – 1)+F(n — 2) | 1 | 1 | 2*1+1 =3 | 2*3+1 =7 | 2*7+3 =17 | 2*17+7 =41 | 2*41+17 =99 |
✎ Решение 2. Теоретическое (метод решения с конца к началу):
F(6) = 2*F(5) + F(4)
F(6) = 2*F(5) + F(4)
F(5) = 2*F(4) + F(3)
F(4) = 2*F(3) + F(2)
F(3) = 2*F(2) + F(1)
F(2) = 2*F(1) + F(0) = 2*1+1 = 3
1 1
F(6) = 2*F(5) + F(4) = 2*41 + 17 = 99 F(5) = 2*F(4) + F(3) + 2*17+7 = 41 ↑ F(4) = 2*F(3) + F(2) = 2*7+3 = 17 ↑ F(3) = 2*F(2) + F(1) = 2*3+1 = 7 ↑ F(2) = 2*F(1) + F(0) = 2*1+1 = 3 ↑ 1 1
Результат: 99


Комментарии
Отправить комментарий