이번 문제에서는 재귀(Recursion) 방식을 사용하여 주어진 패턴을 화면에 출력하는 방법을 알아봅니다.
재귀 함수란 자기 자신을 여러 번 호출하는 함수를 의미합니다. 하나의 프로그램 안에는 재귀 함수가 여러 개 존재할 수 있으며, 재귀를 활용하면 반복문 없이도 간결하게 문제를 해결할 수 있습니다. 다만 재귀 함수는 호출 구조가 복잡해질 수 있어 동작 방식을 정확히 이해하는 것이 중요합니다.
알고리즘
패턴을 출력하기 위해 두 개의 함수를 사용합니다. 하나는 별(*)을 한 줄에 출력하는 함수이고, 다른 하나는 줄바꿈과 함께 전체 패턴을 구성하는 함수입니다.
시작
1단계 -> 함수 int printpattern(int n)
만약 n > 0 이라면
printpattern(n-1) 호출
* 출력
종료
2단계 -> 함수 int pattern(int n)
만약 n > 0 이라면
pattern(n-1) 호출
종료
printpattern(n) 호출
줄바꿈(\n) 출력
종료예제 코드
아래는 위 알고리즘을 C 언어로 구현한 예제입니다.
#include <stdio.h>
// 한 줄에 별(*)을 재귀적으로 출력하는 함수
int printpattern(int n) {
if(n > 0) {
printpattern(n-1); // n을 줄여가며 재귀 호출
printf("*");
}
}
// 전체 패턴을 재귀적으로 구성하는 함수
int pattern(int n) {
if(n > 0) {
pattern(n-1); // 재귀적으로 패턴 출력
}
printpattern(n); // n개의 별 출력
printf("\n"); // 줄바꿈
}
int main(int argc, char const *argv[]) {
int n = 7;
pattern(n);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
* ** *** **** ***** ****** *******
동작 원리 설명
pattern(n) 함수는 먼저 자기 자신을 n-1로 호출하여 이전 단계의 패턴을 모두 출력한 뒤, 현재 단계에서 printpattern(n)을 통해 n개의 별을 한 줄로 출력하고 줄바꿈을 수행합니다. 이러한 재귀 호출 구조 덕분에 별도의 중첩 반복문 없이도 계단 형태의 삼각형 패턴을 깔끔하게 출력할 수 있습니다.