Какие утверждения о рекурсивной функции верны? Выберите все правильные варианты.
- A. Рекурсивная функция вызывает саму себя прямо или косвенно.
- B. У рекурсивной функции должен быть хотя бы один базовый случай, чтобы вычисление могло завершиться.
- C. Любая рекурсивная функция обязательно содержит цикл.
- D. Рекурсивный вызов всегда выполняется только после возврата из функции.
Что может произойти, если в рекурсивной функции нет условия остановки? Выберите все правильные варианты.
- A. Рекурсивные вызовы могут привести к переполнению стека вызовов.
- B. В Python слишком глубокая рекурсия обычно вызывает ошибку
RecursionError. - C. Интерпретатор Python автоматически добавит базовый случай.
- D. Любая такая функция обязательно вернёт
None.
Дан код:
def fact(n): if n == 0: return 1 return n * fact(n - 1)Какие утверждения о вызове
fact(4)верны? Выберите все правильные варианты.- A. Вызов
fact(4)не завершится раньше, чем будет вычислено значениеfact(3). - B.
fact(4)возвращает24. - C. При вычислении
fact(4)функцияfactвызывается 5 раз: сn = 4, 3, 2, 1, 0. - D.
fact(4)возвращает10, так как4 + 3 + 2 + 1 = 10.
- A. Вызов
Какие утверждения о стеке вызовов при рекурсии верны? Выберите все правильные варианты.
- A. Каждый незавершённый вызов функции хранится в стеке вызовов.
- B. После возврата из рекурсивного вызова управление продолжается с места, следующего за этим вызовом.
- C. Стек вызовов автоматически сортирует аргументы по возрастанию.
- D. Рекурсивные вызовы не занимают память.
Дан код:
def fib(n): if n <= 1: return n return fib(n - 1) + fib(n - 2)Какие утверждения о вычислении
fib(5)верны? Выберите все правильные варианты.- A.
fib(5)возвращает5. - B. При вычислении
fib(5)эта функция будет вызвана 15 раз, включая начальный вызов. - C.
fib(5)возвращает8. - D. При вычислении
fib(5)значениеfib(2)вычисляется только один раз.
- A.
Какие утверждения о сравнении рекурсии и итерации верны? Выберите все правильные варианты.
- A. Любой алгоритм, записанный рекурсивно, можно реализовать итеративно, возможно, с явным стеком.
- B. Рекурсивная реализация часто бывает короче и ближе к математическому определению задачи.
- C. Рекурсия всегда работает быстрее итерации и занимает меньше памяти.
- D. Итерация невозможна для задач, в которых есть повторяющиеся подзадачи.
Дан код:
def f(n): if n == 0: return 0 return n + f(n - 1)Какие утверждения о вызове
f(3)верны? Выберите все правильные варианты.- A.
f(3)возвращает6. - B. При вычислении
f(3)функция вызывается сn = 3, 2, 1, 0. - C.
f(3)возвращает3. - D. При вычислении
f(3)функция вызывается сn = 3, 2, 1, 0, -1.
- A.
Дан код:
def sum_digits(n): if n < 10: return n return n % 10 + sum_digits(n // 10)Какие утверждения о вызове
sum_digits(527)верны? Выберите все правильные варианты.- A.
sum_digits(527)возвращает14. - B. При вычислении
sum_digits(527)происходят вызовыsum_digits(527),sum_digits(52)иsum_digits(5). - C. Базовый случай в этой функции —
n < 10. - D.
sum_digits(527)возвращает527.
- A.
Ответы
- A, B
- A, B
- A, B, C
- A, B
- A, B
- A, B
- A, B
- A, B, C