본문 바로가기

내일배움 캠프/TIL

파스칼의 삼각형 재귀함수

삼각형을 그리는 규칙은 다음과 같다.
  1. 숫자가 들어갈 칸을 첫 번째 줄에는 1개, 두 번째 줄에는 2개, 세 번째 줄에는 3개 이런 식으로 한 줄씩 내려가면 한 칸씩 늘어나게 정삼각형 모양으로 만든다.
  2. 첫 번째 줄과 두 번째 줄의 3칸에는 1을 쓴다.
  3. 세 번째 줄부터는 줄의 양쪽 끝 칸에는 1을 쓰고 나머지 칸에는 바로 윗줄에 위치한 칸 중 해당 칸과 인접해 있는 두 칸의 숫자를 더해서 그 값을 쓴다.

위와 같은 규칙을 재귀함수를 이용해서 풀어보려고 했습니다

def Pascal(n):
    if n == 1:
        return [1]
    else:
        prev = Pascal(n-1)
        return [1]+[prev[i]+prev[i+1] for i in range(len(prev)-1)]+[1]

이제 삼각형은 1로 시작해서 1로 끝나고 이제 그 사이에 있는 수는 해당칸의 위층에 있는 왼쪽과 오른쪽칸에 있는 수를 더하면 된다는점을 기억해서 특정 층수를 줬을때 그 층수에서 1층을뺀거를 계산을 하게하고 이제 재귀로 불러온코드에서는 특정층수에서 1층을 뺀거에서 한번더 1층을 빼가지고 1층부터 특정 층수 까지 계산을 할수있게 하였습니다

 

코드에서 1인 경우에는 [1] 만 출력이되고 2일경우에는 for문을 돌리지못하기때문에 [1,1] 3층에서는 2층의 [1,1]을 더해서 [1]+[2]+[1] 이나와서 [1,2,1] 이거를 재귀를 통해 원하는 층수만큼 계산을해서 정답이 나오게했습니다