이 글에서는 C++ 프로그래밍의 재귀(Recursion) 기법을 활용하여 피라미드 모양의 패턴을 출력하는 방법을 알아봅니다. 반복문(for, while)을 사용하지 않고 오직 재귀 호출만으로 공백과 '#' 문자를 조합해 피라미드를 완성할 수 있습니다.
알고리즘
피라미드 패턴을 출력하기 위한 전체적인 절차는 다음과 같습니다.
1단계: 피라미드의 높이(n)를 설정한다
2단계: 재귀 함수를 이용해 공백을 출력한다
3단계: 재귀 함수를 이용해 '#' 문자를 출력한다
4단계: 두 함수를 함께 호출하여 피라미드 패턴을 완성한다
구현 예제
위 알고리즘에 따라 작성한 C++ 코드는 다음과 같습니다. 코드는 세 개의 재귀 함수로 구성되어 있습니다.
- print_space(): 각 줄 앞에 들어갈 공백을 재귀적으로 출력합니다.
- print_hash(): 해당 줄에 필요한 만큼의 '#' 문자를 재귀적으로 출력합니다.
- Pyramid(): 전체 피라미드의 각 행을 순서대로 처리하며 위 두 함수를 호출합니다.
#include <iostream>
using namespace std;
// 공백을 출력하는 함수
void print_space(int space){
if (space == 0)
return;
cout << " ";
// print_space() 재귀 호출
print_space(space - 1);
}
// '#' 문자를 출력하는 함수
void print_hash(int pat){
if (pat == 0)
return;
cout << "# ";
// print_hash() 재귀 호출
print_hash(pat - 1);
}
// 피라미드 패턴을 출력하는 함수
void Pyramid(int n, int num){
// 기저 사례(base case)
if (n == 0)
return;
print_space(n - 1);
print_hash(num - n + 1);
cout << endl;
// Pyramid() 재귀 호출
Pyramid(n - 1, num);
}
int main(){
int n = 5;
Pyramid(n, n);
return 0;
}코드 동작 원리
Pyramid() 함수는 매개변수 n이 0이 되면 재귀 호출을 멈추는 기저 사례를 가지고 있습니다. 각 재귀 호출마다 n이 1씩 감소하며, 이에 따라 공백은 줄어들고 '#' 문자의 개수는 하나씩 늘어납니다. 그 결과 왼쪽 정렬된 삼각형 형태가 중앙으로 밀려나 피라미드 모양이 완성됩니다.
위 코드를 컴파일하고 실행하면 특수 문자 '#'로 구성된 다음과 같은 피라미드가 출력됩니다.
실행 결과
# # # # # # # # # # # # # # #
변수 n의 값을 변경하면 피라미드의 높이를 자유롭게 조절할 수 있으므로, 재귀 구조의 동작 방식을 학습하는 데 유용한 예제입니다.