Факториал
Накапливаем произведение чисел от 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!)) бит промежуточных произведений.