이 글에서는 for, while 같은 반복문을 전혀 사용하지 않고 1부터 100까지의 숫자를 출력하는 C 프로그램을 작성하는 방법을 알아보겠습니다.
재귀(Recursion)를 활용한 해결 방법
이 문제는 재귀 함수(recursive function)를 이용하면 반복문 없이도 손쉽게 해결할 수 있습니다. 재귀 함수는 기본적으로 두 가지 요소로 구성됩니다.
- 기저 사례(Base Case): 재귀 호출을 멈추는 조건
- 재귀 호출(Recursive Call) 및 기타 연산: 자기 자신을 다시 호출하는 부분
이번 예제에서 기저 사례는 인자 n이 1보다 큰지를 검사하는 조건입니다. n이 1에 도달할 때까지 함수가 계속해서 재귀적으로 호출되며, 호출이 거슬러 올라가면서 각 단계에서 n의 값을 순서대로 출력하게 됩니다. 이 과정을 통해 전체 시스템이 1부터 100까지의 숫자를 차례로 생성해 냅니다.
예제 코드
#include<stdio.h>
void generate_numbers(int n) {
if(n > 1) {
generate_numbers(n - 1); // 인자 n-1로 함수를 다시 호출
}
printf("%d ", n);
}
main() {
generate_numbers(100);
}
코드 동작 원리
먼저 generate_numbers(100)이 호출되면, n이 1보다 크므로 generate_numbers(99)가 호출됩니다. 이런 식으로 n이 1에 도달할 때까지 호출이 계속되며, 가장 깊은 호출인 generate_numbers(1)부터 값이 출력된 후 스택이 되감기며(winding back) 2, 3, ... 100까지 순차적으로 화면에 표시됩니다.
실행 결과
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
96 97 98 99 100
참고 사항
재귀 호출은 내부적으로 스택(stack) 메모리를 사용하기 때문에, 출력 범위가 매우 크다면 스택 오버플로우(stack overflow)가 발생할 수 있습니다. 따라서 실무에서는 일정 범위를 넘어서는 경우 반복문을 사용하는 것이 더 안전하고 효율적입니다. 하지만 재귀의 동작 원리를 이해하는 학습 목적이라면 이 방법은 매우 유용한 예제가 됩니다.