Решение: Рекурсивный вывод чисел
Ниже на пяти языках программирования записан рекурсивный алгоритм $F$. При $n > 0$ алгоритм сначала вызывает $F(n - 3)$, затем $F(\lfloor n / 2 \rfloor)$, после чего выводит значение $n$. Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова $F(7)$. Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
1def F(n): 2 if n > 0: 3 F(n - 3) 4 F(n // 2) 5 print(n)
Решение по шагам
6 шаговВызов $F(7)$ сначала вызывает $F(4)$, затем $F(3)$, после чего выводит $7$.
$$F(7) = F(4), F(3), 7$$Для вызова $F(1)$ оба последующих вызова имеют неположительные аргументы, поэтому выводится только $1$.
$$F(1) = 1$$Для вызова $F(2)$ сначала не выполняется $F(-1)$, затем выполняется $F(1)$ и выводится $2$.
$$F(2) = 12$$Вызов $F(4)$ даёт последовательность от $F(1)$, затем от $F(2)$, после чего выводит $4$.
$$F(4) = 1\,12\,4 = 1124$$Вызов $F(3)$ сначала не выполняет $F(0)$, затем получает результат $F(1)$ и выводит $3$.
$$F(3) = 13$$Объединяем результаты в порядке выполнения рекурсивных вызовов.
$$F(7) = 1124\,13\,7 = 1124137$$Где здесь ошибаются
Выводить число до выполнения рекурсивных вызовов.
Заменять целочисленное деление $n // 2$ обычным делением.
Учитывать вызовы с нулевым или отрицательным аргументом как выводящие числа.