Skip to main content

Solving and testing the Fibonacci sequence (part 2199)

Updated 2 min readMarkdown

Разберём решение и сразу накроем его тестами — это хороший стиль работы с кодом.

Задача

Напечатать первые n чисел Фибоначчи: 0, 1, 1, 2, 3, 5, … Каждое следующее равно сумме двух предыдущих.

Решение

def fibonacci(n: int) -> list[int]:
    a, b = 0, 1
    result = []
    for _ in range(n):
        result.append(a)
        a, b = b, a + b
    return result


print(fibonacci(10))

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

Храним два последних числа и на каждом шаге сдвигаем пару вперёд одной строкой a, b = b, a + b. Рекурсия здесь не нужна и работает медленнее.

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

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Сложность

O(n) по времени, O(n) по памяти под результат.

Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай

Такой минимум уже защищает от случайной ошибки при правках кода.

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

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

тестами · требуют · результат · нескольких · стиль · result.append(a · учебных · [listint · времени · одной · привычка · случай · Фибоначчи · Напечатать · медленнее · фреймворков · сразу · Такой · Задача · работает · Храним · сумме · предыдущих · Проверка · короткие

No comments yet. Be the first to comment.

More from this blog