Решение: Рекурсивный вывод чисел
Ниже на пяти языках программирования записан рекурсивный алгоритм $F$. Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова $F(7)$. Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
1def F(n): 2 if n > 0: 3 F(n - 2) 4 F(n // 3) 5 print(n)
Решение по шагам
4 шагаПри вызове $F(7)$ сначала выполняется $F(5)$, затем $F(2)$, после чего выводится $7$.
$$F(7) \to F(5) \to F(3) \to F(1),\ F(1),\ 3,\ F(1),\ 5,\ F(2),\ 7$$Вызов $F(1)$ не выполняет дальнейших положительных рекурсивных вызовов и выводит $1$. Поэтому вызов $F(3)$ выводит $113$.
$$F(3) \to 1,1,3$$Вызов $F(5)$ выводит последовательность $11315$, а вызов $F(2)$ сначала не выводит ничего при $F(0)$, затем выводит $2$.
$$F(5) \to 11315,\quad F(2) \to 2$$Объединяем результаты вызова $F(7)$ и записываем числа подряд без разделителей.
$$1\ 1\ 3\ 1\ 5\ 2\ 7 \to 1131527$$Где здесь ошибаются
Выводят число до выполнения рекурсивных вызовов.
Пропускают повторные вызовы $F(1)$.
Записывают пробелы или разделители между выведенными числами.