16일: 파스칼의 피라미드

5649 단어 100daysofcodepython
파스칼의 피라미드는 파스칼의 삼각형의 3차원 버전입니다.


파스칼의 삼각형처럼 각 숫자는 그 위에 있는 숫자의 합입니다. 피라미드의 끝(0행)은 1입니다. 1행에서도 삼각형에서와 마찬가지로 세 숫자는 그 위에 있는 숫자의 합이기 때문에 1입니다. 다음 행의 각 숫자는 그 위에 있는 숫자의 합입니다.


from functools import lru_cache

@lru_cache(maxsize=None)
def trinomial_coefficient(l, n, k):
    if l < 0 or n < 0 or k < 0:
        return 0

    head = (n == 0 and k == 0)
    bottom_left = (n == l) and (k == 0)
    bottom_right = (n == l) and (k == l)

    if head or bottom_left or bottom_right:
        return 1

    return (trinomial_coefficient(l-1, n-1, k-1) +
            trinomial_coefficient(l-1, n-1, k) +
            trinomial_coefficient(l-1, n, k))


def pascal_pyramid(l):
    rows = list()
    for n in range(l+1):
        coefficients = list()
        for k in range(n+1):
            coefficients.append(trinomial_coefficient(l, n, k))
        rows.append(coefficients)
    return rows

for row in pascal_pyramid(5-1):
    print(row)

좋은 웹페이지 즐겨찾기