재귀에 대한 비유가 생각나서 써 봄.
학교 다녀 본 사람은 시험시간에 시험지를 나누는 두가지 방법이 있는 것을 안다.
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)
}
}
이런 식이 됩니다.
함수의 동작정의 안에 그 함수가 다시 등장합니다. 이런 구조를 재귀함수라고 합니다.
'프로그래밍 > 미분류' 카테고리의 다른 글
한글 초성-중성-종성 인덱스를 r-g-b 에 대응시켜 만든 대응 색상표. (6) | 2017.07.28 |
---|---|
웹해킹 샘플 (0) | 2017.04.27 |
[WinDbg] PyKd (0) | 2017.01.25 |
[ASP] SQL 인젝션 방지법: 패러미터화된 쿼리를 사용한다 (1) | 2016.10.19 |
[UBUNTU] 16.04 로 릴리즈 업그레이드 이후 GUI ( unity ) 화면이 나오지 않았다. (0) | 2016.09.08 |