Skip to main content

Step-by-step: factorial computation (part 8ac1)

Updated 2 min readMarkdown

Медленный разбор помогает понять код, а не просто скопировать его.

Задача

Вычислить факториал натурального числа 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. Результат. Убеждаемся, что возвращаемое значение соответствует условию задачи, включая крайние случаи.

Читая чужой код, повторите тот же мысленный разбор по шагам — это самый быстрый способ научиться.

Читайте также:

Задача · условию · Решение · Проверяем · переполняет · задача · предпочтительнее · работает · итерации · циклы · Убеждаемся · Сложность · памяти · значение · самый · изменениями · работа · Разбор · Вычислить · Самая · result · времени · factorial(n · задачи

No comments yet. Be the first to comment.

More from this blog

Step-by-step: factorial computation (part 8ac1)