fromslow 2021. 1. 30. 17:03

재귀(Recursion)란 함수 자기 자신을 스스로 호출하는 프로그래밍 기법이다.

 

 

 

 

아래와 같이 중첩 루프를 쓰지 않고 

#include <cs50.h>
#include <stdio.h>

void draw(int h);

int main(void)
{
    // 사용자로부터 피라미드의 높이를 입력 받아 저장
    int height = get_int("Height: ");

    // 피라미드 그리기
    draw(height);
}

void draw(int h)
{
    // 높이가 h인 피라미드 그리기
    for (int i = 1; i <= h; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            printf("#");
        }
        printf("\n");
    }
}

 

 

 

바깥 루프를 없앤 draw 함수를 만들어 재귀적으로 호출하도록 할 수 있다.

즉, draw 함수 안에서 draw 함수를 호출하는 것이다.

#include <cs50.h>
#include <stdio.h>

void draw(int h);

int main(void)
{
    int height = get_int("Height: ");

    draw(height);
}

void draw(int h)
{
    // 높이가 0이라면 (그릴 필요가 없다면)
    if (h == 0)
    {
        return;
    }

    // 높이가 h-1인 피라미드 그리기
    draw(h - 1);

    // 피라미드에서 폭이 h인 한 층 그리기
    for (int i = 0; i < h; i++)
    {
        printf("#");
    }
    printf("\n");
}

h-1 값으로 draw 함수를 호출하고 난 다음에 h만큼의 #을 출력한다.

내부에서 호출된 draw를 따라가면 h = 0이 되는 상태가 오는데

이 때는 아무것도 출력되지 않도록 조건문을 추가한다.

 

 

 

 

 

 

출처: www.boostcourse.org/cs112