Workshop Hub
учебные материалы

Пошаговый разбор: вычисление факториала

Разложим решение на шаги и объясним, что происходит на каждом из них.

Задача

Вычислить факториал натурального числа n: n! = 1 · 2 · … · n, а 0! = 1. Самая первая задача на циклы в учебнике.

Решение


def factorial(n: int) -> int:
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result


print(factorial(6))

Как это работает

Аккумулятор result умножается на числа от 2 до n. Итеративное решение предпочтительнее рекурсивного: оно не переполняет стек вызовов.

Пример работы


720

Сложность

O(n) по времени, O(1) по памяти.

Разбор по шагам

  1. Шаг 1. Входные данные. Проверяем, что приходит в функцию, и какие значения считаются корректными.
  2. Шаг 2. Основной цикл. Именно здесь происходит вся работа; следим за изменениями переменных на каждой итерации.
  3. Шаг 3. Результат. Убеждаемся, что возвращаемое значение соответствует условию задачи, включая крайние случаи.

Когда каждый шаг понятен, доработка решения перестаёт быть лотереей.


Related: