본문 바로가기

프로그래밍/미분류

재귀 시험지 분배 비유

반응형

재귀에 대한 비유가 생각나서 써 봄.


학교 다녀 본 사람은 시험시간에 시험지를 나누는 두가지 방법이 있는 것을 안다.

1. 선생님이 돌아다니면서, 모든 사람에게 하나씩 시험지를 나누어 준다.

2. 매 줄마다 학생수만큼 시험지를 맨 앞사람에게만 주고, 시험지 더미을 받은 사람은 자신이 하나를 갖고, 시험지 더미를 뒷사람에게 준다.


즉, 대략


def 시험지나눠주기(시험지더미, 학생들):

# 학생들 = [ 학생1, 학생2, 학생3, ..., 학생n ]

for 학생 in 학생들:

시험지하나주기(학생)

시험지더미-=1



def 시험지나눠주기뒤로넘기기(시험지더미, 학생들):

# 학생들 = [ 학생1, 학생2, 학생3, ... 학생n ]

학생들[0].시험지하나갖기()      # 학생들[0] 은 시험지를 받은 학생들 리스트의 첫번째 학생

시험지더미-=1

if 학생들[1:] not empty:     # 학생들[1:] 은 원래 학생들리스트에서 학생들[0] 을 뺀 나머지.

시험지나눠주기뒤로넘기기(시험지더미, 학생들[1:])


---

한줄에 시험지를 나누어 주고 싶습니다.


첫번째 사람에게 시험지 뭉치를 건네고, "너하나 갖고 뒷사람한테 전달해" 라고 하면, 모두에게 전달이 됩니다. 이걸 함수처럼 표현해 보면,



함수 하나갖고뒷사람에게전달(나, 시험지)

{

  내가하나갖는다.

  뒷사람이 있으면:

  {

     하나갖고뒷사람에게전달(뒷사람, 시험지-1)

  }

}


이런 식이 됩니다.


함수의 동작정의 안에 그 함수가 다시 등장합니다. 이런 구조를 재귀함수라고 합니다.

728x90