Итеративный и рекурсивный способы вычисления факториала

Будет напечатано только 120: main вызывает итеративный get_result(5). Рекурсивная get_result2 объявлена, но в показанном запуске не выполняется.

Короткий ответ

Что ответить на собеседовании

Будет напечатано только 120: main вызывает итеративный get_result(5). Рекурсивная get_result2 объявлена, но в показанном запуске не выполняется.

Подробный разбор

Ответ с пояснениями

Условие

Опишите работу программы: какие функции объявлены, как реализовано вычисление факториала при помощи цикла и при помощи рекурсии, и какое значение будет напечатано при выполнении.

value = 1

def get_result(n):
    result = 1
    if n > 1:
        for i in range(2, n + 1):
            result *= i
    return result

def get_result2(n):
    if n == 0 or n == value:
        return value
    print(value)
    return n * get_result2(n - value)

if __name__ == '__main__':
    print(get_result(5))

Ответ

Будет напечатано только 120: main вызывает итеративный get_result(5). Рекурсивная get_result2 объявлена, но в показанном запуске не выполняется.

get_result начинает с единицы и перемножает числа от 2 до n включительно. Для 5 получается 2·3·4·5 = 120.

get_result2 при глобальном value=1 реализует рекурсию n * factorial(n−1) с базовыми случаями 0 и 1. Если вызвать её для 5, она дополнительно напечатает четыре единицы до возврата 120. Зависимость от изменяемой глобальной переменной делает её хрупкой.

Обеим версиям нужна проверка неотрицательного целого n: итеративная иначе неверно вернёт 1, а рекурсивная для отрицательного значения будет уходить глубже до ошибки. Итеративный вариант не расходует стек рекурсии.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее