Ниже на пяти языках программирования записан рекурсивный алгоритм F.
| Бейсик | Python |
|---|---|
SUB F(n) PRINT n IF n < 5 THEN F(n + 1) F(n + 3) END IF END SUB
| def F(n): print(n) if n < 5: F(n + 1) F(n + 3)
|
| Паскаль | Алгоритмический язык |
procedure F(n: integer); begin writeln(n); if n < 5 then begin F(n + 1); F(n + 3) end end
| алг F(цел n) нач вывод n, нс если n < 5 то F(n + 1) F(n + 3) все кон |
| С++ | |
void F(int n) { cout << n << endl; if (n < 5) { F(n + 1); F(n + 3); } }
| |
Чему равна сумма всех чисел, напечатанных на экране при выполнении вызова F(1)?
Первым действием процедура F(1) выведет число 1. Далее процедура F(1) вызовет процедуру F(n + 1), в результате выполнения которой на экране появится число n + 1 = 2. Процедура F(2) вызовет процедуру F(3), которая выведет на экран число 3 и вызовет процедуру F(4), которая выведет на экран число 4 и вызовет F(5), которая выведет на экран число 5.
После этого управление вернётся к процедуре F(4), которая начнёт выполнять следующий шаг своего алгоритма, т. е. обратиться к процедуре F(n + 3) = F(7). Процедура F(7) выведет на экран число 7. Далее управление вернётся к процедуре F(3). Рассуждая аналогично приходим к выводу, что процедура F(3) дополнительно выведет на экран число 6, процедура F(2) — 5.
Последним действием процедуры F(1) будет вызов процедуры F(n + 3) = F(4), которая выведет на экран числа
Таким образом, на экране будут числа 1, 2, 3, 4, 5, 7, 6, 5, 4, 5, 7. Их сумма равна 49.
Ответ: 49.

