Сумма факториалов
Вычисляем следующий факториал из предыдущего и добавляем в сумму.
Как к ней подойти
Научитесь замечать повторяющееся действие и аккуратно собирать результат в цикле for.
Цикл for подходит, когда известно, сколько раз нужно повторить действие. Перед циклом задайте начальное значение результата, внутри обновляйте его, а после цикла выводите итог. Проверьте, входит ли последняя граница в range().
После умножения на i накопитель равен i!, поэтому не нужно вычислять каждый факториал заново.
Проверьте перед запуском
- Нужен один цикл, без повторного вычисления факториалов.
- Не включайте 0! в сумму.
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: Накопление факториала
После умножения на i накопитель равен i!, поэтому не нужно вычислять каждый факториал заново.
n = int(input())
factorial = 1
total = 0
for i in range(1, n + 1):
factorial *= i
total += factorial
print(total)
Время: O(n) операций с растущими целыми. Память: O(1) целых чисел; O(n log n) бит для результата.
Другой способ: Схема Горнера с конца
Сумма записывается как 1·(1 + 2·(1 + 3·(1 + … + n))). Обрабатываем вложенные скобки от n к 1 за один цикл, без math.
n = int(input())
total = 0
for i in range(n, 0, -1):
total = i * (1 + total)
print(total)
Время: O(n) операций с растущими целыми. Память: O(1) целых чисел; O(n log n) бит для результата.