Мини-урок · перед практикой

Факториал

Накапливаем произведение чисел от 1 до n.

Как к ней подойти

Научитесь замечать повторяющееся действие и аккуратно собирать результат в цикле for.

Коротко о теме

Цикл for подходит, когда известно, сколько раз нужно повторить действие. Перед циклом задайте начальное значение результата, внутри обновляйте его, а после цикла выводите итог. Проверьте, входит ли последняя граница в range().

Ключевая идея · Итеративное произведение

Начальное значение 1 нейтрально для умножения и обеспечивает 0! = 1.

Проверьте перед запуском

  • Накопитель произведения нужно начинать с 1, не с 0.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Итеративное произведение

Начальное значение 1 нейтрально для умножения и обеспечивает 0! = 1.

n = int(input())
answer = 1
for value in range(2, n + 1):
    answer *= value
print(answer)

Время: O(n) умножений; стоимость растёт с длиной больших чисел. Память: O(log(n!)) бит для результата.

Другой способ: Сбалансированное рекурсивное произведение

Делим диапазон множителей пополам, перемножаем результаты. Глубина рекурсии логарифмическая, библиотека math не используется.

def product(left, right):
    if left > right:
        return 1
    if left == right:
        return left
    middle = (left + right) // 2
    return product(left, middle) * product(middle + 1, right)
n = int(input())
print(product(1, n))

Время: O(n) умножений больших целых. Память: O(log n) кадров и O(log(n!)) бит промежуточных произведений.