재귀는 ( recursion ) 반복과 ( iteration ) 본질적으로 차이가 없습니다.
한자를 그대로 풀이하면 다시 돌아간다는거죠.
while 문은 중괄호의 끝에서 조건으로 되돌아가지만,
재귀는 자신의 이름을 호출한 곳에서 함수의 인자를 받아오는 곳으로 돌아가는 차이를 가짐과 동시에,
둘 다 괄호로 돌아간다는 공통점을 가지지요.
다만 사람들이 낯설어 하는건,
1. 재귀의 경우 인자와, 지역변수가 반복 회수만큼 ( 스택에 ) 재생성된다.
2. 재귀의 경우 호출 회수만큼 다시 리턴을 하게 되며 이때 이전의 context 가 복구된다.
라는 메카니즘이죠.
다른 말로 하면, 반복도 재귀적인 일반항일 뿐이고,
둘 다 반복실행을 종료하기 위한 특수항이 필요하다는 것이죠.
클래싱도 일반화( 부모 )와 특수화( 자식 ), 반복문과 재귀도 일반화와 특수화로 구성되고,
템플릿도 (일반화 ) 템플릿 특수화도,
프로그래밍의 모든것은 일반화와 특수화로 이루어져 있을 뿐입니다.
결과적으로
반복은 원 의 기하학적 형태를 가진 반복이고,
재귀는 원기둥의 기하학적 형태를 가진 반복이죠.
이상적인 공간에선 '원' 이 존재하지만,
현실적인 존재의 공간에선 두께가 0 이기 힘드므로,
'원기둥' 이 현실적인 logical primitive 라고도 볼 수 있습니다.
반복과 재귀, 둘을 비교하면 어느쪽이 일반화된 형태고,
어느쪽이 특수화된 형태일까요?
재귀가 일반화 아닐까요 - return 0;
반복에 스택까지 달아줘야 재귀랑 동등해진다는데
피보나치처럼 두갈래짜리 재귀 이런건 반복만으로 힘들듯
저도 커헠님의 생각에 동의합니다.
그렇다면 우리는 앞으로 원을, 높이가 0인 원기둥이라 불러야 할 것입니다.
그게 더 본질적이니까요 : )
둘을 서로 변환가능하다고 하면 일반적으로 생각했을 때 동치여야 하는거 아닌가여..
재귀가 더 큰개념 아님?
저는 잘 몰라서..
ㅇㅇ 더 큰 개념 맞음.
이건 0.00000000...............001 은 0이냐는 수학적 궤변으로 연결될 수 있는 문제 : )
뭔 말이여 어려운건 싫어 재귀 실타
오............