반복과 재귀는 유사한 작업을 수행한다.
반복문으로 코드로 구현한 것을 재귀식으로도 구현할 수 있다.
반복은 수행하는 작업이 완료될 때까지 계속 반복하는 것으로 보통 for문 while문 구조
재귀는 자신을 정의할 때 자기 자신을 재참조하는 것을 의미한다.
재귀함수는 함수내부에서 자기 자신을 계속적으로 호출하면서 풀어가는 함수이다.
int fact(int n){ if(n<=1) return 1; else return n * fact(n-1); }
하노이의 탑(Tower of Hanoi)은 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 원판의 크기 순서대로 쌓여있다. 하노이탑 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다.
/* N : 원판의 개수 from : 출발지 temp : 옮기기 위해 이동해야 장소 to : 목적지 */ void Hanoi(int N, int from, int temp, int to) { // 이동할 원반의 수가 1개라면? if (N == 1) { print(from + " " + to + "\n"); return; } /* A -> C로 옮긴다고 가정할 떄, STEP 1 : N-1개를 A에서 B로 이동 (= from 지점의 N-1개의 원판을 temp 지점으로 옮긴다.)*/ Hanoi(N - 1, from, to, temp); /*STEP 2 : 1개를 A에서 C로 이동 (= from 지점의 N번째 원판을 to지점으로 옮긴다.)*/ print(from + " " + to + "\n"); /*STEP 3 : N-1개를 B에서 C로 이동 (= temp 지점의 N-1개의 원판을 to 지점으로 옮긴다.)*/ Hanoi(N - 1, temp, from, to); }