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