Итерируйтесь по range(n, 0, -1) и возвращайте i * i через yield. Для n ≤ 0 генератор не выдаёт элементов.
Реализовать генератор, выдающий квадраты чисел в обратном порядке
Итерируйтесь по range(n, 0, -1) и возвращайте i * i через yield. Для n ≤ 0 генератор не выдаёт элементов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию‑генератор, которая принимает целое число n и последовательно возвращает квадраты всех целых чисел от n до 1 включительно.
Ответ
Итерируйтесь по range(n, 0, -1) и возвращайте i * i через yield. Для n ≤ 0 генератор не выдаёт элементов.
def reverse_squares(n):
for i in range(n, 0, -1):
yield i * i
assert list(reverse_squares(4)) == [16, 9, 4, 1]
Правая граница range не включается, поэтому остановка на нуле позволяет получить квадрат единицы. Значения вычисляются только при продвижении генератора; промежуточный список не создаётся. Полный обход занимает O(n) шагов, дополнительная память — O(1), если не учитывать размер самих чисел. Преобразование через list в примере нужно только для демонстрации результата.