Помогите, пожалуйста, решить задачу по Python
Реализуйте генератор, возвращающий бесконечную последовательность чисел из треугольника Паскаля. Последовательность, возвращаемая генератором, должна выглядеть так: 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 = ' ')
Ответы (1 шт):
На основе реализации из 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