컴퓨터공학/알고리즘

재귀

도전하는일반인 2021. 9. 17. 10:22

들어가기 전에

알고리즘을 구현하기 위해 코드를 작성하다 보면 동일한 작업을 반복해야 할 때가 있습니다. 이러한 작업을 함수로 구현하면 코드를 보다 효율적으로 만들 수 있음을 배웠습니다. 하지만 함수 내에서도 동일한 작업이 반복되는 경우는 어떨까요? 이번 강의에서는 함수를 함수 내에서 재사용하는 방법, 즉 재귀적으로 호출하는 방법을 배워 보겠습니다.

 

학습 목표

함수를 재귀적으로 사용하는 코드를 작성할 수 있습니다.

 

핵심 단어

  • 재귀

재귀

함수를 사용할 때 어디에서 호출했나요? main 안에서 프로그램을 작성하면서 필요한 순간에 호출하여 사용합니다.

그런데 main 역시 함수라는걸 기억하시나요? main이라는 함수 안에서 또 다른 함수를 사용한 것입니다.

이 사실을 알게 되었을 때, 우리는 함수가 본인 스스로를 호출해서 사용할 수 있는지에 대해 의문을 가질 수 있습니다.

이에 대한 대답은 할 수 있다 이며, 이러한 것을 재귀(Recursion)라고 부릅니다.

 


아래와 같이 피라미드 모양을 출력하기 위해 다음과 같은 코드를 작성할 수 있습니다.

 

#

##

###

####

 

 

높이를 입력 받아 중첩 루프를 통해 피라미드를 출력해주는 draw 함수를 정의한 것이죠.

여기서 꼭 중첩 루프를 써야만 할까요? 사실 바깥 쪽 루프는 안 쪽 루프에서 수행하는 내용을 반복하도록 하는 것일 뿐입니다.

따라서 바깥 쪽 루프를 없앤 draw함수를 만들고, 이를 ‘재귀적으로’ 호출하도록 해서 똑같은 작업을 수행할 수 있습니다.

즉, draw 함수 안에서 draw 함수를 호출 하는 것이죠. 아래 코드와 같이 수정할 수 있습니다.

 

draw 함수 안에서 draw 함수를 다시 호출 하는 부분을 유의하시기 바랍니다.

h라는 높이를 받았을 때, h-1 높이로 draw 함수를 먼저 호출하고, 그 후에 h 만큼의 #을 출력합니다. 여기서 내부적으로 호출된 draw 함수를 따라가다 보면 h = 0인 상황이 오게 됩니다.

따라서 그 때는 아무것도 출력을 하지 않도록 하는 조건문을 추가해줘야 합니다.

 

이렇게 재귀를 사용하면 중첩 루프를 사용하지 않고도 하나의 함수로 동일한 작업을 수행할 수 있습니다.



생각해보기


반복문을 쓸 수 있는데도 재귀를 사용하는 이유는 무엇일까요?

 

나의 생각 : 코드의 가독성 때문에 사용한다.

 

 

출처 :https://www.boostcourse.org/cs112/lecture/119025?isDesc=false 네이버커넥트재단

'컴퓨터공학 > 알고리즘' 카테고리의 다른 글

병합정렬  (0) 2021.09.17
정렬 알고리즘의 실행시간  (0) 2021.09.16
선택 정렬  (0) 2021.09.16
버블 정렬  (0) 2021.09.16
선형 검색  (0) 2021.09.16