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