Решение: Рекурсивный алгоритм F
Ниже на пяти языках программирования записан один и тот же рекурсивный алгоритм $F$. Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова $F(7)$. Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
1def F(n): 2 if n > 0: 3 F(n - 3) 4 print(n) 5 F(n // 2)
Решение по шагам
5 шаговДля $n \leq 0$ функция завершается без вывода. Вызов $F(1)$ сначала обращается к $F(-2)$, затем выводит 1 и вызывает $F(0)$, поэтому результатом является 1.
$$F(1) \to 1$$Вызов $F(2)$ сначала обращается к $F(-1)$, выводит 2, затем вызывает $F(1)$.
$$F(2) \to 21$$Вызов $F(4)$ сначала выполняет $F(1)$, выводит 4, затем выполняет $F(2)$.
$$F(4) \to 1\,4\,2\,1$$Вызов $F(3)$ сначала выполняет $F(0)$, выводит 3, затем выполняет $F(1)$.
$$F(3) \to 3\,1$$Вызов $F(7)$ сначала выполняет $F(4)$, выводит 7, затем выполняет $F(3)$.
$$F(7) \to 1\,4\,2\,1\,7\,3\,1$$Где здесь ошибаются
Выводят число $n$ до выполнения вызова $F(n-3)$.
Учитывают вызовы с аргументом $n \leq 0$, хотя они ничего не выводят.
Забывают второй рекурсивный вызов $F(n \mathbin{//} 2)$.