Задача 11
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова F(9). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
1. Рассмотрим алгоритм, записанный на языке программирования Паскаль.
procedure F(n: integer);
begin
if n > 0 then
begin
write(n);
F(n - 3);
F(n div 3)
end
end;
2. В данном фрагменте программы рекурсивная процедура вызывает саму себя дважды. Благодаря условию, находящемуся в процедуре (if n > 0 — условие остановки рекурсии), обеспечивается выход из рекурсии и не происходит «зацикливания».
3. Выполнение процедур закончится, когда в каждой из вызванных процедур выполнятся по две внутренние процедуры, и условие if n > 0 перестанет работать (когда n ≤ 0).
4. div — целочисленное деление, т.е., например:
5 div 2 = 2
1 div 2 = 0
5. Отобразим пошагово выполнение каждой процедуры. Под вызовом каждой процедуры разместим именно те действия, которые происходят в данной процедуре:
Выделены те числа, которые выводятся на экран. Подчеркнуты те процедуры, в которых условие не работает, соответственно, ничего на экран не выводится.
6. Перепишем по порядку все выводимые на экран числа: 9631231
Ответ: 9631231