Решение: Трассировка рекурсивной функции
Ниже на пяти языках программирования записан рекурсивный алгоритм $F$. Во всех вариантах алгоритм выводит значение параметра $n$, а затем, если $n \ge 4$, вызывает функцию для $n - 1$ и для целой части от деления $n$ на 2. Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова $F(6)$. Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
1def F(n): 2 print(n, end='') 3 if n >= 4: 4 F(n - 1) 5 F(n // 2)
Решение по шагам
3 шагаПри каждом входе в функцию сначала выводится её параметр $n$.
$$F(6) \Rightarrow 6$$Для значений $n \ge 4$ сначала выполняется вызов с параметром $n-1$, затем — с параметром $n \mathbin{//} 2$.
$$6 \to 5 \to 4 \to 3 \to 2 \to 2 \to 3$$Соединяем выведенные числа без пробелов и разделителей.
$$6543223$$Где здесь ошибаются
Записывают число после завершения рекурсивных вызовов, а не при входе в функцию.
Меняют порядок рекурсивных вызовов $F(n-1)$ и $F(n \mathbin{//} 2)$.
Добавляют пробелы или разделители между числами.