문제 상황
C 프로그래밍 언어에서 for문, while문 같은 반복문이나 goto 문을 사용하지 않고 이름을 10번 출력하는 프로그램을 작성해 보겠습니다.
해결 방법
일반적으로 코드 블록을 조건이 거짓이 될 때까지 반복 실행하려면 반복문(loop)을 사용합니다. 하지만 반복문 없이도 재귀 함수(recursion)를 활용하면 동일한 결과를 얻을 수 있습니다.
재귀란 함수가 자기 자신을 다시 호출하는 기법으로, 종료 조건(base case)을 설정해 두면 반복문과 똑같이 동작하면서 호출 횟수를 제어할 수 있습니다.
예제 1: 재귀 함수 활용
아래 프로그램은 반복문이나 goto 문 없이 재귀 호출만으로 이름을 10번 출력합니다.
#include <stdio.h>
void printname(char* name,int count){
printf("%03d : %s\n",count+1,name);
count+=1;
if(count<10)
printname(name,count);
}
int main(){
char name[50];
printf("\nEnter you name :");
scanf("%s",name);
printname(name,0);
return 0;
}실행 결과
Enter you name :tutorialspoint 001 : tutorialspoint 002 : tutorialspoint 003 : tutorialspoint 004 : tutorialspoint 005 : tutorialspoint 006 : tutorialspoint 007 : tutorialspoint 008 : tutorialspoint 009 : tutorialspoint 010 : tutorialspoint
동작 원리
printname 함수는 이름을 한 번 출력한 뒤 count 값을 1 증가시키고, count가 10보다 작으면 자기 자신을 다시 호출합니다. 이 과정이 count가 10에 도달할 때까지 반복되며, 이때 재귀 호출이 멈추면서 총 10번의 출력이 완성됩니다.
예제 2: 일반적인 for문 사용 (비교용)
참고로, 아래는 반복문을 사용해 이름을 10번 출력하는 전통적인 방식입니다.
#include <stdio.h>
int main(){
char name[50],i;
printf("\nEnter you name :");
scanf("%s",name);
for(i=0;i<10;i++){
printf("%s\n",name);
}
return 0;
}실행 결과
Enter you name :TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint TutorialsPoint
정리
반복문 없이 특정 작업을 여러 번 수행해야 할 때는 재귀 함수가 가장 대표적인 대안입니다. 다만 재귀는 호출 깊이가 깊어지면 스택 오버플로우가 발생할 수 있으므로, 반복 횟수가 많은 경우에는 일반적인 반복문을 사용하는 것이 안전합니다.