재귀는 ( recursion ) 반복과 ( iteration ) 본질적으로 차이가 없습니다.

한자를 그대로 풀이하면 다시 돌아간다는거죠.


while 문은 중괄호의 끝에서 조건으로 되돌아가지만,

재귀는 자신의 이름을 호출한 곳에서 함수의 인자를 받아오는 곳으로 돌아가는 차이를 가짐과 동시에,

둘 다 괄호로 돌아간다는 공통점을 가지지요.


다만 사람들이 낯설어 하는건,


1. 재귀의 경우 인자와, 지역변수가 반복 회수만큼 ( 스택에 ) 재생성된다.

2. 재귀의 경우 호출 회수만큼 다시 리턴을 하게 되며 이때 이전의 context 가 복구된다.


라는 메카니즘이죠.


다른 말로 하면, 반복도 재귀적인 일반항일 뿐이고,

둘 다 반복실행을 종료하기 위한 특수항이 필요하다는 것이죠.


클래싱도 일반화( 부모 )와 특수화( 자식 ), 반복문과 재귀도 일반화와 특수화로 구성되고,

템플릿도 (일반화 ) 템플릿 특수화도,

프로그래밍의 모든것은 일반화와 특수화로 이루어져 있을 뿐입니다.


결과적으로

반복은 원 의 기하학적 형태를 가진 반복이고,

재귀는 원기둥의 기하학적 형태를 가진 반복이죠.


이상적인 공간에선 '원' 이 존재하지만,

현실적인 존재의 공간에선 두께가 0 이기 힘드므로,

'원기둥' 이 현실적인 logical primitive 라고도 볼 수 있습니다.


반복과 재귀, 둘을 비교하면 어느쪽이 일반화된 형태고,

어느쪽이 특수화된 형태일까요?