Помогите, пожалуйста, решить задачу по Python

Рейтинг: -4Ответов: 1Опубликовано: 21.03.2023

Реализуйте генератор, возвращающий бесконечную последовательность чисел из треугольника Паскаля. Последовательность, возвращаемая генератором, должна выглядеть так: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 .... Генератор должен быть экономным по памяти, т.е. не хранить в себе все предыдущие вычисленные значения.

С самим треугольником у меня проблемы нет, но как превратить этот код в генератор я не понимаю.

n = int(input())
P = []

for i in range(n):
    row = [1]*(i + 1)
    for j in range(i + 1):
        if j != 0 and j != i:
            row[j] = P[i-1][j-1] + P[i-1][j]
    P.append(row)
for r in P:
    print(*r, end = ' ')

Ответы

▲ 0Принят

На основе реализации из OEIS

import itertools

n = int(input())
P = []

def gen(p=None):
    it = itertools.count() if p is None else range(p, p+1)
    for row in it:
        x = 1
        yield x
        for m in range(row):
            x = (x * (row - m)) / (m + 1)
            yield x

def pt_ist(n):
    return list(itertools.islice(gen(), n))

#вывод
P = pt_ist(n)
print(*[round(x) for x in P], sep = ' ')

ввод:

55

вывод:

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1