Факториал
Вы решили задачу. Теперь можно сравнить подходы.
Накапливаем произведение чисел от 1 до n.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Итеративное произведение
Начальное значение 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!)) бит промежуточных произведений.
На что обратить внимание
- Накопитель произведения нужно начинать с 1, не с 0.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.