Будет напечатано только 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, а рекурсивная для отрицательного значения будет уходить глубже до ошибки. Итеративный вариант не расходует стек рекурсии.