Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 재귀 함수로 피라미드 패턴 출력하기

이 글에서는 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의 값을 변경하면 피라미드의 높이를 자유롭게 조절할 수 있으므로, 재귀 구조의 동작 방식을 학습하는 데 유용한 예제입니다.