부스트코스/4. 알고리즘
[CS50] 4.7 재귀
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이 되는 상태가 오는데
이 때는 아무것도 출력되지 않도록 조건문을 추가한다.