Условие задачи
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Бейсик | Python |
SUB F(n) IF n > 0 THEN PRINT n, F(n - 3) F(n \ 2) END IF END SUB |
def F(n): if n > 0: print(n) F(n - 3) F(n // 2) |
Алгоритмический язык | Паскаль |
алг F (цел n) нач если n > 0 то вывод n F(n - 3) F(div(n, 2)) все кон |
procedure F(n: integer); begin if n > 0 then begin write(n); F(n - 3); F(n div 2) end end; |
С++ | |
void F(int n){ if (n > 0){ std::cout << n; F(n - 3); F(n / 2); } } |
Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова F(7). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
Решение
Распишем последовательно результаты работы функции:
F(7) 7 F(4) F(3)
F(4) 4 F(1) F(2)
F(3) 3 F(0) F(1)
F(2) 2 F(-1) F(1)
F(1) 1 F(-2) F(0)
F(0) -
F(-1) -
F(-2) -
И запишем результаты, собирая их с конца:
F(1) 1
F(2) 21
F(3) 31
F(4) 4121
F(7) 7412131
Ответ
7412131